В моем проекте на 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 на отпускании мыши.
Комментариев нет:
Отправить комментарий