如何异步制作一些UI任务

时间:2012-02-19 09:42:57

标签: wpf multithreading user-interface

我有一些UI任务需要很长时间。我有一些“自制”属性网格(我使用ItemControl,其中项目模板使用ContentControl,项目本身保存要在Content控件中使用的数据窗口。)。

应用程序是Shapes查看器,其中每个形状都有其属性。每次用户点击某个形状时,属性网格都会显示其属性(60种不同的属性)。

更新过程大约需要1-2秒。而这会更新应用程序冻结。

有没有办法在后台更新属性网格? 有没有办法阻止上次更新?

问候,莱昂

2 个答案:

答案 0 :(得分:0)

您需要使用线程和调度程序来执行此操作。

WPF / SL中的调度程序 - http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcher

为了使用另一个线程,你有一些选择:

  1. Threadpool(仅限.Net 4上的TaskClass) - http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx
  2. 主题类 - http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
  3. BackgroundWorker类 - http://msdn.microsoft.com/en-us/library/cc221403(v=vs.95).aspx
  4. 如果您不知道如何使用线程,则第3个选项最简单。

    我想要花费这么长时间才能获取属性,所以你需要做的是在另一个线程中执行fetch,然后在这个线程中使用Dispatcher来更新你的datagrid, 你必须使用Dispatcher从另一个线程更新你的GUI。

答案 1 :(得分:0)

您应该实现MVVM模式,以确保您的UI控件是一种显示数据的方式,而不是数据的持有者。

然后,您可以选择执行各种后台任务,并在准备好后仅更新VM内容。

观看此视频:

http://blog.lab49.com/archives/2650