标签在自己的进程与C#和WinForms

问题描述:

可能重复
Windows Forms application like Google Chrome with multiple processes
Chrome/IE8 multi-process design, is it possible in .NET?
Sample for Multi-process C# app like Google Chrome标签在自己的进程与C#和WinForms

双方IE8和谷歌Chrome浏览器有separate processes for each tab that is opened

例如,您启动IE8并在自己的标签中打开雅虎和谷歌,你结束了你的系统上运行3个进程:

  • IE8本身过程[主进程]
    • 谷歌标签过程
    • 雅虎标签进程

我在C#/ WinForms中玩弄类似的东西。

举一个简单的例子:我有一个显示窗体的主进程,并且在子进程中有一个按钮。我们怎样才能将Button从另一个进程渲染到我的Form上?

这听起来不像这样一个好主意。 WinForms的通用控件大部分不是线程安全的,并且给每个控件它自己的过程看起来很琐碎。

如果你想试试这个,或许给每个表格它是自己的过程,甚至只是它自己的线程。或者,如果你有一个选项卡控制,然后只是给每个选项卡自己的线程。

更新
.Net提供了一种您可以使用的称为AppDomain的东西。它不仅仅是一个线程,而是一个过程。如果您有多个选项卡页面,则可以创建一个自定义控件,以保存每个选项卡页面的内容,并将每个自定义控件放入其自己的程序集中。然后这些程序集可以动态加载到他们自己的AppDomain中。从那里你应该能够创建你想要的控件的一个实例。但是,有关通过appdomains进行交谈的一些规则,所以我不知道您只能将该控件添加到表单上的选项卡页面。

+0

乔尔,谢谢你的回答。每个选项卡上的1个线程将不起作用,这会破坏在其自己的进程中对每个选项卡进行沙盒处理的目的,从而防止其崩溃或冻结父进程。请参阅Ryan关于沙盒的回答。 – 2008-10-14 15:47:59

铬为每个选项卡提供自己的进程的原因是沙盒。如果一个选项卡的行为错误,则不太可能取下整个浏览器。您的应用中是否有类似的需求?

此外,请注意,浏览器选项卡不需要共享信息。选项卡上的内容是在选项卡上,没有其他选项卡需要关心它。您的Winforms应用程序是否有类似的分歧

+0

感谢您的回答。我理解沙箱背后的有效推理。我的应用程序也是类似的,它们之间不需要了解对方的标签,所有应用程序都不应该会导致父进程崩溃。 – 2008-10-14 15:43:54