在我的 WPF 应用程序中,我需要在我的 UI 线程上运行一个昂贵的操作(我们称之为它ExpensiveUIOperation()
),并且我想保持 UI 是最新的以跟踪它的进度。
为了跟踪进度,我只需要一个TextBlock
,它的Text
属性绑定到一个整数依赖属性PercentageComplete
。在 期间ExpensiveUIOperation()
,我只是根据需要设置 的值PercentageComplete
。
现在,我对线程有足够的了解,知道如果我只是ExpensiveUIOperation()
在我的 UI 线程上运行,TextBlock 似乎不会保持最新,因为 UI 线程将被阻止,停止任何界面更新。
所以我想我可以像这样异步地做到这一点:
Dispatcher.BeginInvoke(new Action(ExpensiveUIOperation), DispatcherPriority.Background);
但这仍然行不通。在操作完成之前,文本块不会在视觉上更新。
有没有办法做到这一点?
不幸的是,在这种情况下,我不能使用后台线程,因为该操作大量使用了 UI 线程拥有的对象。