2012-02-19 13 views
0

我有一些耗時過長的UI任務。我有一些'自制'屬性網格(我使用ItemControl,其中項目模板使用ContentControl,項目本身包含要在內容控件中使用的數據模板)。如何異步製作一些UI任務

該應用程序是Shapes查看器,其中每個形狀都有其屬性。每次用戶點擊某個形狀時,屬性網格顯示其屬性(60個不同的屬性)。

更新過程大約需要1-2秒。而這更新應用程序凍結。

有沒有辦法在後臺更新屬性網格? 有什麼辦法可以停止上次更新?

問候,萊昂

回答

0

您應該實現MVVM模式,以確保您的UI控件是顯示數據而不是數據的持有者的一種方式。

然後,您可以選擇執行各種後臺任務,並且只需在準備好時更新VM內容即可。

看看這個視頻:

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

+0

在我的情況下,我用MVVM,我的屬性網格(DataGid)顯示一些虛擬機列表。問題在於UI更新需要很長時間 – leonnoah 2012-02-19 09:56:53

0

你需要線程和調度工作要做到這一點。

調度員WPF/SL - http://www.switchonthecode.com/tutorials/working-with-the-wpf-dispatcher

爲了使用另一個線程,你有一些選擇:

  1. 線程池(TaskClass僅基於.NET 4) - http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx
  2. Thread類 - 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

如果你不知道如何使用線程,第三個選項是最簡單的。

我猜這麼長時間是提取屬性,所以你需要做的是在另一個線程中執行獲取,然後在這個線程中使用分派器來更新你的數據網格, 你必須使用分派器來更新來自另一個線程的GUI。

+0

感謝您的qiuck重播...(תודהעלהתגובההמהירה) 我的問題是,UI任務(updaing DataGrid中)花費太多的時間。直到更新沒有完成,我無法用UI做任何事情。 你認爲Threadpool/Threads/BackgroundWorker會讓我解決這個問題嗎? 謝謝agine – leonnoah 2012-02-19 09:54:47

+0

看我的編輯.... – 2012-02-19 10:01:18

+0

多爾,對不起,因爲newbe。 但我不明白'fetching'的含義。你的意思是要推動UI定義和數據更新嗎? 盡我所見,最難的部分是數據網格更新 – leonnoah 2012-02-19 11:27:07