簡體   English   中英

WPF多線程UI-用戶控件

[英]WPF Multithreaded UI - Usercontrols

我已經看到了使用多個窗口的WPF中多線程UI的一些代碼示例,其中每個窗口都在其自己的UI線程上運行。 我很好奇-有沒有一種方法可以通過嵌入式控件來實現?

例如,假設我在window1中嵌入了usercontrol1和usercontrol2。 Usercontrol1開始旋轉並阻止主UI線程。 窗口和usercontrol2生效。 有沒有辦法做到這一點,即使usercontrol1阻止了,Window1 + usercontrol2仍然可以響應?

讓我們假設我們不控制usercontrol1的開發人員-因此我們不能告訴他們讓他們的控件表現出來。

讓我們還假設必須在usercontrol1 + 2之間交換數據。

我應該探索類似AddIn的東西嗎?

您不能在另一個線程上“運行”控件(與Winforms一樣,控件本身必須與頂級父級控件一起創建並運行在同一線程上),但是沒有什么可以阻止您從另一個線程上啟動對另一個線程的操作。用戶控制。 您只需要確保使用DispatcherInvoke對控件本身有直接影響的任何操作。 不過,幕后處理可以完全在另一個線程上完成。 只是必須通過Dispatcher調用的UI的物理更新。

編輯:編輯完問題后,不可以,無法將特定組件執行的所有“工作”移至另一個線程。 如果您無法控制相關組件的開發,那么您將受到開發人員的控制,由開發人員決定執行代碼。

在頂部,您可以看到Visual( Window ),它是從DispatcherObject繼承的。 它被設計為STA線程模型,其中單線程正在訪問對象的方法和屬性。

這就是為什么兩個控件必須在與Window相同的線程中創建的原因。

如果您需要在控件之間交換數據,而又不控制那些控件的開發人員,那么我會考慮使用PRISM或其他MVVM框架。 Prism中 ,您具有EventAggregator ,這基本上是訂閱者發布者模式,您的UserControl1可以發布內容,而其他內容(如果已訂閱)將收到該內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM