我的 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 为 freeze

如何显示 please wait 消息?或者我会更好地在后台线程上运行它并(以某种方式)在持续时间内锁定 UI?顺便说一句,我正在使用 .Net 4。

最佳答案

你是对的,它没有更新,因为你在同一个线程上运行代码,所以在你的进程完成之前渲染不会继续。

你说你没有使用后台线程是因为你不希望用户在操作运行时做任何事情,但是像这样完全锁定你的应用程序从来都不是一个好主意。

更好的解决方案是将 Form/Window/UserControl/etc 的 IsEnabled 绑定(bind)到 IsBusy 属性。然后当它变得忙碌时,整个表单被禁用以防止用户修改它,同时不会锁定您的应用程序。

关于c# - 尝试在长时间运行的操作期间在 WPF 中显示 "please wait"消息,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14607586/

10-17 02:26