我的 XAML 中有一个 please wait
TextBlock
其 Visibility
属性绑定(bind)到一个 我的 ViewModel 上的 IsBusy
属性(实现 INotifyPropertyChanged
)。一个单独的按钮启动一个长时间运行(2-3 秒)的进程,如下所示:
IsBusy = true;
try
{
// Do some long-running process
}
finally
{
IsBusy = false;
}
但是 please wait
消息从未出现。我假设该操作正在 UI 线程上运行,因此没有给它刷新的机会?如果我在单独的线程上运行上述代码,它确实有效,但我不希望用户在操作运行时做任何事情 - 我很高兴 UI 卡住
。
如何显示 please wait
消息?或者我会更好地在后台线程上运行它并(以某种方式)在持续时间内锁定 UI?我正在使用 .Net 4 顺便说一下。
最佳答案
你是对的,它没有更新,因为你在同一个线程上运行代码,所以直到你的进程完成后渲染才会继续。
您说您没有使用后台线程是因为您不希望用户在操作运行时做任何事情,但是像这样完全锁定您的应用程序绝不是一个好主意。
更好的解决方案是将 Form/Window/UserControl/etc 的 IsEnabled
绑定(bind)到 IsBusy
属性。然后当它变得繁忙时,整个表单将被禁用以防止用户修改它,同时不会锁定您的应用程序。
关于c# - 尝试在长时间运行的操作期间在 WPF 中显示 "please wait"消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14607586/