Страницы

Поиск по вопросам

понедельник, 28 января 2019 г.

Как в C# (WPF) выполнить метод спустя некоторое время после события?

В моем проекте на WPF, есть кнопка, на LeftMouseDown срабатывает событие, в котором спустя 3 секунды пока кнопка мыши зажата, выполнится метод (отправим в базу данные) но если мы отпустим левую кнопку мыши тоесть выполнится другое событие LeftMouseUp нужно отменить выполнения этого метода. Как в коде C# сгенерировать такое поведение.
Для наглядности добавлю свой код, без этой манипуляции

И ViewModel
public Command EngineStartOn { get { return new Command(() =>
{ //Выполнить такую манипуляцию спустя 3 секунды EngineStart = false;
}); } } public Command EngineStartDown { get { return new Command(() => { //Оборвать выполнения функции если не прошло 3 секунды }); } }


Ответ

Ну например так:
CancellationTokenSource cts = null;
async void ScheduleDatabaseUpdate() { if (cts != null) throw new InvalidOperationException("Update already scheduled"); cts = new CancellationTokenSource(); try { await Task.Delay(TimeSpan.FromSeconds(3), cts.Token); await Task.Run(() => <тут запись в базу>); } catch (OperationCanceledException) { } }
void CancelPendingUpdate() { if (cts == null) throw new InvalidOperationException("No pending update"); cts.Cancel(); cts = null; }
ScheduleDatabaseUpdate вызываете на нажатии, CancelPendingUpdate на отпускании мыши.

Комментариев нет:

Отправить комментарий