如何在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. 的Java:UI線程兩個線程應用
- 5. C#應用程序線程
- 6. 在線程中更新UI(Windows Form,C#)
- 7. C++中的多線程應用程序
- 8. 錯誤:線程在c#Windows應用程序中被中止
- 9. C#UI線程無響應
- 10. 可以從Windows窗體應用程序中的兩個窗體訪問線程
- 11. 如何通過c#應用程序用UI調用外部Windows應用程序?
- 12. 運行在新線程的C#Windows應用程序的功能
- 13. 線程C#UI
- 14. 一個線程在iPhone應用程序中殺死另一個線程(兩個線程都是主線程)?
- 15. 多線程windows phone應用程序
- 16. ReleaseMutex在單線程的C#Windows失敗窗體應用程序
- 17. Android應用程序的兩列UI
- 18. 通信b/w兩個不同的windows應用程序在c#
- 19. C#Windows應用程序attachmentFilename
- 20. C#Windows應用程序
- 21. C#Windows應用程序
- 22. Windows應用程序C
- 23. C#Windows應用程序
- 24. Windows窗體UI線程問題c#
- 25. 多線程應用程序 - C++/Debian的
- 26. 的HelloWorld多線程C#應用程序
- 27. C#中的Windows應用程序?
- 28. c中的Windows服務應用程序#
- 29. C#Windows應用程序中的PayPal API
- 30. 在線c#應用程序
@Joey:雖然WinForms/WPF控件具有線程關聯,但實際上可以有多個UI線程,只要它們不共享控件即可。 – 2011-01-25 12:13:33