C# 方法执行时禁用按钮(PreviewLeftMouseDown/Up必须可用)

C# 方法执行时禁用按钮(PreviewLeftMouseDown/Up必须可用),c#,wpf,C#,Wpf,我需要一个序列如下: 按钮默认状态 按下按钮,“按下按钮的方法”执行,按钮本身被禁用一段时间 由于“禁用”时间已过,所以按钮已启用,按下按钮,“按下按钮的方法”将执行 按钮默认状态 我已经尝试过这个代码,它在第一部分正常工作。但第二部分(Up)不执行。 有人能帮我吗 private void btn1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e) { var

我需要一个序列如下:

  • 按钮默认状态
  • 按下按钮,“按下按钮的方法”执行,按钮本身被禁用一段时间
  • 由于“禁用”时间已过,所以按钮已启用,按下按钮,“按下按钮的方法”将执行
  • 按钮默认状态
我已经尝试过这个代码,它在第一部分正常工作。但第二部分(Up)不执行。 有人能帮我吗

    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。只需将长时间运行的代码放入等待的任务中,如图所示。
只需将长时间运行的代码放入等待的任务中,如图所示。
什么是“长时间运行的代码”?