2010-02-23 419 views
3

我有一個wpf應用程序需要大約30秒來創建地圖/圖形。我已經讀過,沒有簡單的方法可以綁定到UI渲染線程以獲得進度更新。所以我打算在一個值轉換器上使用一個計數器來爲我的地圖着色,但也是在UI線程上,所以我的問題是有沒有人發現任何使用渲染線程的流暢方法呢?WPF UI線程狀態

謝謝。

回答

3

您可以在BackgroundWorker中創建地圖/圖形,該圖允許您在函數中調用ReportProgress,您可以在其中設置完成百分比並提高ProgressChanged事件以更新UI。

+0

同意在另一個線程+ 1。 – Anvaka 2010-02-23 15:12:32

+1

對不起,我忘了提及我正在使用綁定在XAML中生成我的地圖/圖形。糾正我,如果我錯了,但在這種情況下,我不能使用後臺工作人員,因爲地圖呈現在隱藏的渲染線程正確? – Nathan 2010-02-23 16:49:23

0

當你說UI渲染線程,你的意思是從WPF內部或UI線程隱藏渲染線程?

在任何情況下,有一個單獨的線程構建您的地圖並通知UI有關進度不會幫助您?

0

即時通訊不知道這是你在找什麼。

我使用類似於下面的代碼來加載大約300個圖像(大約200 MB),並沒有任何UI放慢。 (用戶可以看到每個圖像被加載,我只是保留一個空的佔位符圖像,直到最後的圖像加載)

圖像加載在後臺線程,然後調用函數實際將它們放入WPF場景。

這是一個使用文本框的簡單示例。你可以從任何線程調用這個函數,如果它需要改變到GUI線程,它就會解決。 (對於我的項目,當然,我正在使用位圖,而不是文本框)。

delegate void UpdateUIThreadDelegate(String str); 

    public void DisplayString(String strMessage) 
    { 
      if (this.InvokeRequired) 
      { 
       UpdateUIThreadDelegate updateDelegate = DisplayString; 

       this.BeginInvoke(updateDelegate, strMessage); 

       return; 
      } 

      myTextBox.Text = strMessage; 
    } 

乾杯 安東

0

如果使用綁定一個數據源這可能需要很長時間才能返回,以配合您的用戶界面,你可以設置你的綁定「IsAsync =真」,這樣的結合成爲異步。

如果你想在你的數據源加載的時間顯示一些其他DATAS(甚至動畫我猜的),你可以使用一個PriorityBinding

HTH

Riana