Страницы

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

суббота, 4 января 2020 г.

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

#c_sharp #wpf #timeout


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

Для наглядности добавлю свой код, без этой манипуляции


                            
                                
                            
                            
                                
                                    
                                
                                
                                    
                                
                            
                        


И ViewModel

    public Command EngineStartOn
    {
        get { return new Command(() =>

        {
            //Выполнить такую манипуляцию спустя 3 секунды
                EngineStart = false;

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

    


Ответы

Ответ 1



Ну например так: 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 на отпускании мыши.

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

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