我正在使用wpf(MVVM)。我看到一些软件会禁用整个窗口并控制单击按钮的时间,并且无法正常工作。
例如,如果它是按钮命令的代码:
Thread.Sleep(20000);
在此20000中,整个窗口被禁用。 (或其他任何耗时的功能)
这是个好方法吗?如果是,我该怎么办?
我知道IsEnabled
属性,但是我看到的软件代码不包含该属性,因此我认为必须有一个更通用的方法或设置。
答案 0 :(得分:4)
这是个好方法吗?
不。绝不要在几秒钟内阻塞UI线程。这是用户不友好且不好的做法。
您应该在后台线程上执行任何可能长时间运行的方法。最简单的方法是启动任务并等待它。当然,您可以在任务完成所需的时间内禁用整个窗口,例如:
private async Task SomeLongRunningMethod()
{
IsEnabled = false;
await Task.Run(() => Thread.Sleep(20000));
IsEnabled = true;
}
如果您采用MVVM设计模式,则可以设置窗口本身的IsEnabled
属性,也可以设置视图模型的source属性。无论哪种方式,您都不应该阻止UI线程。