WPF 單一 UI 執行緒模型下,耗時操作會凍結整個介面。為了讓插件互不干擾、提升整體回應性,可為每個獨立插件分配專屬 UI 執行緒。本文介紹建立多 UI 執行緒的標準模式與關鍵要點。
DispatcherObject 衍生類)僅能由建立它的執行緒存取。Dispatcher 處理所有 UI 訊息,長時間運算會阻塞訊息迴圈。Thread uiThread = new Thread(() =>
{
// 1. 建立視窗與視覺樹
Window win = new Window
{
Title = $"Plugin UI - Thread {Thread.CurrentThread.ManagedThreadId}"
};
win.Show();
// 2. 啟動該執行緒的 Dispatcher 訊息迴圈
Dispatcher.Run();
});
// 關鍵設定
uiThread.IsBackground = true; // 主程式結束時自動回收,避免進程殘留
uiThread.SetApartmentState(ApartmentState.STA); // WPF 要求 STA
uiThread.Start();
ApartmentState.STA。win.Dispatcher.Invoke/BeginInvoke 封送。多 UI 執行緒是打破 WPF 單執行緒瓶頸的有效手段,配合插件隔離架構,能顯著提升複合型應用的流暢度與穩定性。掌握 Dispatcher、STA、背景執行緒生命週期管理是落地關鍵。