如何在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