使用C#和WinForms在自己的进程中选项卡

时间:2008-10-14 15:33:40

标签: c# winforms process

  

可能重复
  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

IE8和Google Chrome浏览器都有separate processes for each tab that is opened

例如,您启动IE8并在自己的标签页中打开Yahoo和Google,最终您的系统上运行了3个进程:

  • IE8本身进程[主进程]
    • Google标签处理
    • Yahoo标签处理

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

举一个简单的例子:我有一个显示Form的主进程,并且我在子进程中有一个Button。我们如何将Button从其他进程渲染到我的表单上?

2 个答案:

答案 0 :(得分:1)

这听起来不是一个好主意。 winforms常用控件在很大程度上不是线程安全的,并且给每个控件它自己的进程看起来很蹩脚。

如果你想尝试这个,也许给每个表单它自己的进程,或者甚至只是它自己的线程。或者如果你有一个制表符控件,那么只需给每个标签赋予自己的主题。

<强>更新
.Net提供了一个可以使用的称为AppDomain的东西。它不仅仅是一个线程,而是一个过程。如果你有一个带有多个标签页的from,你可以创建一个自定义控件来保存每个标签页的内容,并将每个自定义控件放在它自己的程序集中。然后可以将这些程序集动态加载到自己的AppDomain中。从那里你应该能够创建一个你想要的控件的实例。但是,有关于在appdomains中进行对话的某些规则,因此我不知道您只能将该控件添加到表单上的标签页。

答案 1 :(得分:0)

chrome为每个标签提供自己的进程的原因是沙盒。如果一个选项卡表现不正常,则不太可能删除整个浏览器。你的应用中是否有类似的需求?

另请注意,浏览器标签不需要共享信息。选项卡上的内容位于选项卡上,没有其他选项卡需要关注它。您的winforms应用程序是否同样划分?