В моем проекте на WPF, есть кнопка, на LeftMouseDown срабатывает событие, в котором спустя 3 секунды пока кнопка мыши зажата, выполнится метод (отправим в базу данные) но если мы отпустим левую кнопку мыши тоесть выполнится другое событие LeftMouseUp нужно отменить выполнения этого метода. Как в коде C# сгенерировать такое поведение.
Для наглядности добавлю свой код, без этой манипуляции
<Image
Grid.Row="2"
Grid.Column="1"
RenderOptions.BitmapScalingMode="HighQuality">
<Image.Style>
<Style TargetType="{x:Type Image}">
<Setter Property="Source" Value="/Images/Panel_3/Button_1.png" />
<Style.Triggers>
<DataTrigger Binding="{Binding EngineStart}" Value="True">
<Setter Property="Source" Value="/Images/Panel_3/Button_1_Press.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<i:InvokeCommandAction Command="{Binding EngineStartOn}" />
</i:EventTrigger>
<i:EventTrigger EventName="PreviewMouseLeftButtonUp">
<i:InvokeCommandAction Command="{Binding EngineStartDown}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</Image>
И 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
на отпускании мыши.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
ЗдравствуйтеНе могли бы вы мне показать небольшой пример кода приложения, сделанного на WPF (C#) согласно паттерну MVVM и следующим условиям:
Я подключаюсь к MySQL базе данных, получаю из нее данныеВ первом столбце (Data) таблицы Data у меня должен быть файл, в котором будет много значений
Добрый, подскажите как реализовать вывод постов с разными калссами и разной структурой в одном цикле, не понимаю как это сделатьНапример:
Реализация по принципу единой точки входа, содержимое адресной строки разбивается $routes = explode('/', $_SERVER['REQUEST_URI']) и результаты передаются в обработчики