【发布时间】:2017-03-18 19:39:46
【问题描述】:
我正在重写 WPF 的 OnRender 来绘制复杂的图形。这可能很少需要很长时间。我想向用户表明应用程序没有崩溃,但“只是”需要很长时间才能呈现。
我该怎么做?在 OnRender 调用期间似乎无法以任何方式修改 UI。
【问题讨论】:
-
您最后的说法是正确的,您不能在修改 UI 的同时修改 UI。这两个操作将在同一个线程上,因此是顺序的,而不是异步的。
我正在重写 WPF 的 OnRender 来绘制复杂的图形。这可能很少需要很长时间。我想向用户表明应用程序没有崩溃,但“只是”需要很长时间才能呈现。
我该怎么做?在 OnRender 调用期间似乎无法以任何方式修改 UI。
【问题讨论】:
您正在谈论在绘图顶部放置“忙碌指示器”。
只需在顶部放置一个半透明的网格,上面写着“正在加载...” 你就完成了。
将其可见性绑定到一些布尔值,您在进入复杂渲染时更新一次,完成后更新一次。
如果你想看运动,或者放一个带有渐变背景的旋转椭圆..
【讨论】:
由于 OnRender 方法将在 UI 线程上执行,因此您无法执行任何其他操作,例如显示交互式 ProgressBar 或在代码执行期间响应用户输入。
您可以做的是弹出一个在单独线程中启动的新窗口,并在您开始绘制复杂图形之前显示该窗口。
有关此问题的更多信息,请参阅我在以下类似问题中的回答。
Wait screen during rendering UIElement in WPF
一旦OnRender 方法返回您,然后关闭临时“加载”窗口:
Can I stop WPF from executing UI actions out of the order in my code
【讨论】: