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