【发布时间】:2021-06-24 03:24:54
【问题描述】:
假设我正在编写一个带有单文档界面的 WPF 桌面应用程序(例如一个简单的图像编辑工具)。现在用户开始对该文档的操作可能需要 0.2 到 3 秒才能完成(例如对图像应用复杂的过滤器)。我们还假设在此过程中几乎不应该允许用户做任何事情。 (例如,在处理图像时,允许用户对该图像执行任何其他操作没有多大意义。)
在 WinForms 中,我会在这段时间内阻塞 UI 线程,将鼠标指针设置为 WaitCursor 并在主窗口中写一个状态标签,显示“正在处理...”。
现在有了 WPF,这似乎既不可能也不打算。首先,当 UI 线程被阻塞时,我无法更改主窗口上的标签来给用户即时反馈。
我在互联网上(如 StackOverflow 上的此处)读到这是错误的方法,我应该使用后台处理来保持 UI 线程响应。
好的,但是当我这样做时,我需要在操作进行时禁用几乎所有的用户界面。 (在我的图像编辑示例中:在处理图像时,不应允许用户对该图像启动另一个操作。)
但似乎没有一种简单的方法可以禁用(几乎)WPF 中的所有主窗口。对于更长的操作,最好的解决方案可能是弹出一个带有进度条的模式对话框,阻止对主窗口的所有访问。但是对于一个短暂的操作(可能只有几分之一秒),让对话窗口非常短暂地闪烁可能会非常不愉快。
那么我应该在这里做什么? WPF 中向用户提供有关短阻塞操作的反馈的最佳方式是什么?
【问题讨论】:
标签: c# wpf user-interface