BackgroundWorker更新GUI

dan*_*ord 2 c# silverlight wpf asynchronous

在我的Silverlight应用程序中,我有一个操作需要几秒钟并与GUI强烈交互(在一个大的"for"语句中创建显示对象)

起初我想过使用BackgroundWorker来避免冻结界面.但是我不能直接更新GUI,所以我使用了Dispatcher.BeginInvoke,但它仍然冻结了界面(因为长动作在gui部分).

我想要的是在加载我的对象时显示BusyIndi​​cator但我希望用户能够在加载时继续工作.

我还可以做些什么?有什么建议?

Jar*_*Par 5

即使是忙碌的图标也无法帮到你.繁忙的图标或任何其他图形项需要UI线程来泵送消息以便不"冻结"UI.如果长时间运行的操作在UI线程上运行,那么即使繁忙的光标也会"冻结".

你需要

  1. 将昂贵的长时间运行逻辑移动到后台线程
  2. 将UI逻辑分解为块,让UI在它们之间刷新.