单击按钮时禁用WPF窗口

时间:2019-02-19 15:52:00

标签: c# wpf mvvm

我正在使用wpf(MVVM)。我看到一些软件会禁用整个窗口并控制单击按钮的时间,并且无法正常工作。

例如,如果它是按钮命令的代码:

Thread.Sleep(20000);

在此20000中,整个窗口被禁用。 (或其他任何耗时的功能)

这是个好方法吗?如果是,我该怎么办? 我知道IsEnabled属性,但是我看到的软件代码不包含该属性,因此我认为必须有一个更通用的方法或设置。

1 个答案:

答案 0 :(得分:4)

  

这是个好方法吗?

不。绝不要在几秒钟内阻塞UI线程。这是用户不友好且不好的做法。

您应该在后台线程上执行任何可能长时间运行的方法。最简单的方法是启动任务并等待它。当然,您可以在任务完成所需的时间内禁用整个窗口,例如:

private async Task SomeLongRunningMethod()
{
    IsEnabled = false;
    await Task.Run(() => Thread.Sleep(20000));
    IsEnabled = true;
}

如果您采用MVVM设计模式,则可以设置窗口本身的IsEnabled属性,也可以设置视图模型的source属性。无论哪种方式,您都不应该阻止UI线程。