在WPF 應用程式中,您想要更新UI 元素(例如、進度條、文字區塊)在屬於不同類別的後台執行緒中執行的冗長計算期間。但是,您不確定如何應對這項挑戰,因為傳統方法已被證明無效。
最有效的解決方案涉及利用事件和調度程序。其實作方式如下:
計算類別中的事件宣告:
在負責計算的類別中(例如, calcClass),聲明一個事件來通知UI進度更新:
public event EventHandler<EventArgs<YourStatus>> ProgressUpdate;
主班活動報名:
在主班UI類別(例如MainWindow),註冊到ProgressUpdate event:
calcClass.ProgressUpdate += (s, e) => { Dispatcher.Invoke((Action)delegate() { /* Update UI */ }); };
計算中的事件觸發類別:
計算方法內,必要時觸發ProgressUpdate事件:
//part 1 if(ProgressUpdate != null) ProgressUpdate(this, new YourStatus(status)); //part 2
雖然事件和排程程式通常是首選,您也可以使用BackgroundWorker元件:
var worker = new BackgroundWorker(); worker.DoWork += (s, e) => { /* Perform calculations */ }; worker.ProgressChanged += (s, e) => { /* Update UI with progress */ }; worker.RunWorkerCompleted += (s, e) => { /* Finalize UI updates */ };
:
worker.RunWorkerAsync(input);
:
請記住,與BackgroundWorker相比,使用事件和調度程序可以提供更多的控制和靈活性。 結論透過應用透過這些技術,您可以從後台執行緒高效地更新 UI 元素,確保回應能力和無縫的使用者互動。以上是如何從單獨類別中的後台執行緒安全地更新 WPF UI?的詳細內容。更多資訊請關注PHP中文網其他相關文章!