如何在C#windows應用程序中實現兩個UI線程?C#windows應用程序中的兩個UI線程
4
A
回答
7
您需要先調用Thread.SetApartmentState()才能將線程切換到STA,然後再啓動它。並抽取一個消息循環以保持在該線程上創建的任何窗口都是活動的,Application.Run()。 Application.ExitThread()將終止消息循環並導致線程退出。使用Run(Form)可以自動執行,就像它在主線程中一樣。
但要注意,用戶可能很難處理您在該線程上創建的窗口。它們與主線程中的窗口沒有Z順序關係,桌面是它們的父項。這往往會使他們很容易迷失在另一個窗口之後,包括你自己的窗口。令人尷尬的解決辦法是TopMost和禁止SetParent()。
5
這可能不是一個答案,但更多的解釋。
如果兩個線程被允許同時訪問同一像素 - 這將是多線程用戶界面的結果 - 您需要線程間的某種同步。如果線程沒有同步像素的顏色應該如何確定?
所以我們不得不加鎖。每個像素的鎖定成本非常高,所以我們很快會轉向鎖定每個控件或每個窗口。你去了:通過允許1和唯一的線程訪問我們實現了鎖定的UI。
順便說一句:用控制或控制樹替換像素;它不僅僅是關於共享數據的像素,無論是像素還是控制。
1
在一個新的線程中調用Application.Run(...)
,它將打開帶有自己的消息循環的窗體。
new Thread(() => Application.Run(someForm)).Start();
相關問題
- 1. c#windows應用程序中的線程
- 2. 更新UI從另一個線程的C++ Windows窗體應用程序
- 3. C#WPF應用程序中的主線程和UI線程是否相同?
- 4. C#應用程序線程
- 5. 錯誤:線程在c#Windows應用程序中被中止
- 6. 可以從Windows窗體應用程序中的兩個窗體訪問線程
- 7. 如何通過c#應用程序用UI調用外部Windows應用程序?
- 8. 一個線程在iPhone應用程序中殺死另一個線程(兩個線程都是主線程)?
- 9. Android應用程序的兩列UI
- 10. Windows窗體UI線程問題c#
- 11. Windows應用程序C
- 12. C#Windows應用程序
- 13. C#Windows應用程序attachmentFilename
- 14. C#Windows應用程序
- 15. C#Windows應用程序
- 16. 的HelloWorld多線程C#應用程序
- 17. 多線程應用程序 - C++/Debian的
- 18. C#Windows應用程序中的PayPal API
- 19. c中的Windows服務應用程序#
- 20. C#中的Windows應用程序?
- 21. Windows應用程序默認UI
- 22. 在線c#應用程序
- 23. 如何保持線程在整個Windows應用程序中活着c#
- 24. 從C#應用程序中的多個線程加載DLL
- 25. 多線程UI更新應用程序中的StackOverflowException
- 26. 如何從線程更新WPF應用程序中的UI?
- 27. 線程在我的Windows窗體應用程序仍被凍結我的UI
- 28. 在C++中製作線程與兩個單獨的程序?
- 29. 在線程中調用UI應用程序
- 30. Windows CE簡單多線程應用程序 - 線程調度
@Joey:雖然WinForms/WPF控件具有線程關聯,但實際上可以有多個UI線程,只要它們不共享控件即可。 – 2011-01-25 12:13:33