c# - 尝试在长时间运行的操作期间在 WPF 中显示 "please wait"消息

标签 c# wpf visibility inotifypropertychanged textblock

我的 XAML 中有一个 please wait TextBlockVisibility 属性绑定(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/

相关文章:

c# - 无法将对象发送到 SOAP Web 服务

c# - 为什么 ConcurrentDictionary.TryRemove 需要第二个参数?

c# - 获取没有文本框的文本输入

wpf - 在 WPF 中创建一个简单的表?

WPF - 如何默认数据绑定(bind)文本 block 的可见性?

c# - 将数据从 SQL Server 复制到 Mysql

WPF MVVM Light - SelectedItem 的绑定(bind)没有改变

.net - AsyncCommand CanExecute 处理程序

java - 抛出私有(private)异常有意义吗?

java : accessing parent variable in multi threaded programe