C# 方法执行时禁用按钮(PreviewLeftMouseDown/Up必须可用)
我需要一个序列如下:C# 方法执行时禁用按钮(PreviewLeftMouseDown/Up必须可用),c#,wpf,C#,Wpf,我需要一个序列如下: 按钮默认状态 按下按钮,“按下按钮的方法”执行,按钮本身被禁用一段时间 由于“禁用”时间已过,所以按钮已启用,按下按钮,“按下按钮的方法”将执行 按钮默认状态 我已经尝试过这个代码,它在第一部分正常工作。但第二部分(Up)不执行。 有人能帮我吗 private void btn1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var
- 按钮默认状态
- 按下按钮,“按下按钮的方法”执行,按钮本身被禁用一段时间
- 由于“禁用”时间已过,所以按钮已启用,按下按钮,“按下按钮的方法”将执行
- 按钮默认状态
private void btn1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var btn = (Button)sender;
btn.IsEnabled = false; //Disable button.
var fooTimer = new System.Timers.Timer(5000); //Exceute after 5000 milliseconds
fooTimer.Elapsed += (fooTimer_s, fooTimer_e) =>
{
//It has to be dispatched because of thread crossing if you are using WPF.
Dispatcher.Invoke(() =>
{
btn.IsEnabled = true; //Bring button back to life by enabling it.
fooTimer.Dispose();
});
};
fooTimer.Start();
// methods for button Down go here
}
private void btn1_PreviewMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
// methods for button Up go here
}
提前谢谢 您可以在异步单击处理程序中更轻松地执行此操作:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
button.IsEnabled = false;
await Task.Run(() =>
{
// perform time-consuming action
Thread.Sleep(5000); // just for test
});
button.IsEnabled = true;
}
您可以在异步单击处理程序中更轻松地执行此操作:
private async void Button_Click(object sender, RoutedEventArgs e)
{
var button = (Button)sender;
button.IsEnabled = false;
await Task.Run(() =>
{
// perform time-consuming action
Thread.Sleep(5000); // just for test
});
button.IsEnabled = true;
}
时间呢?那个么其他应该在“向上”部分执行的方法呢?不知道你们的确切意思<代码>等待任务。延迟(5000)代码>而不是任务。运行将禁用按钮5秒。
等待任务。延迟(5000)代码>表示按钮“冻结”5秒。没关系,我需要那个预设。我在你的代码中没有看到这样的机会。对不起,我不明白。如果要在运行耗时的操作时禁用按钮,当然不需要Task.Delay。只需将长时间运行的代码放入等待的任务中,如图所示。只需将长时间运行的代码放入等待的任务中,如图所示。
什么是“长时间运行的代码”?时间呢?那个么其他应该在“向上”部分执行的方法呢?不知道你们的确切意思<代码>等待任务。延迟(5000)代码>而不是任务。运行将禁用按钮5秒。等待任务。延迟(5000)代码>表示按钮“冻结”5秒。没关系,我需要那个预设。我在你的代码中没有看到这样的机会。对不起,我不明白。如果要在运行耗时的操作时禁用按钮,当然不需要Task.Delay。只需将长时间运行的代码放入等待的任务中,如图所示。只需将长时间运行的代码放入等待的任务中,如图所示。
什么是“长时间运行的代码”?