我认为可能会这样做,因为像谷歌浏览器这样的程序已经更好了,并将每个选项卡放在一个单独的进程中。 那么如何将一个GUI控件(如datagridview)放在一个单独的线程上呢?
答案 0 :(得分:0)
这不是单独线程中的控件,而是通过控件启动的请求。
假设您在不同的地址上打开了两个标签。您单击指向第一个选项卡上另一个站点的链接。同时,您单击第二个选项卡上的另一个链接。
首先,您需要知道在单击第一个选项卡上的链接时可能会启动一个线程,从而使GUI响应。当您单击其中的链接时,这与第二个选项卡相同。
其次,我们现在有一个线程(主线程,也称为GUI线程),其工作是处理用户交互。另一个线程处理来自第一个选项卡上的链接的请求,以及来自第二个选项卡上链接的另一个线程。
第三,虽然正在处理您对这两个标签的链接请求,但您可以说打开一个新标签并在Google上进行搜索!然后,这需要您的GUI响应,即使应用程序,浏览器占用您的请求。
第四,在后台线程返回时,他们将返回主线程报告其工作结果,即他们获得的Web响应请求解决链接点击链接的DNS。
在C#中实现这一目标并使其尽可能简单的有趣方法是通过BackgroundWorker
类。
BackgroundWorker
的每个实例代表一个线程。因此,当用户单击链接时,您需要实例化应用程序在捕获鼠标单击时所需的BackgroundWorker
。然后,该请求将发送到DoWork()
事件,该事件是在调用RunWorkerAsync()
方法时引发的。
Here's an interesting tutorial了解如何使用BackgroundWorker
答案 1 :(得分:0)
这篇Microsoft文章大致解释了Windows资源管理器如何完成您的要求:
http://msdn.microsoft.com/en-us/library/ms741870.aspx#multi_browser
每个顶级窗口基本上都有一个线程,该窗口的所有事件都在同一个线程上触发。
答案 2 :(得分:-1)
我不认为你需要一个线程用于每一个控件,否则你将拥有大量线程,然后你可能会遇到各种各样的麻烦。
以下是几个可以帮助您入门的网站: http://www.albahari.com/threading/
http://msdn.microsoft.com/en-us/library/aa645740(VS.71).aspx