Tabs in ihrem eigenen Prozess mit C # und WinForms

Mögliches Duplikat
   Windows Forms-Anwendung wie Google Chrome mit mehreren Prozessen < br>    Chrome/IE8 Multi-Prozess-Design, ist es möglich in .NET?
   Beispiel für Multi-Prozess C# App wie Google Chrome

Sowohl IE8 als auch Google Chrome haben separate Prozesse für jede Registerkarte, die geöffnet wird .

Wenn Sie zum Beispiel IE8 starten und Yahoo und Google auf ihren eigenen Tabs öffnen, haben Sie am Ende 3 Prozesse auf Ihrem System:

  • IE8 itself process [master process]
    • Google tab process
    • Yahoo tab process

Ich spiele mit der Idee einer ähnlichen Sache in C #/WinForms.

Ein einfaches Beispiel: Ich habe einen Masterprozess, der ein Formular anzeigt, und ich habe einen Button in einem untergeordneten Prozess. Wie können wir den Button aus dem anderen Prozess auf mein Formular rendern?

7

2 Antworten

Das hört sich nicht nach so einer guten Idee an. Die üblichen Steuerelemente von winforms sind größtenteils nicht thread-sicher, und es scheint eklig zu sein, jeder Steuerung ihren eigenen Prozess zu geben.

Wenn Sie das ausprobieren möchten, geben Sie vielleicht jedem Formular einen eigenen oder sogar einen eigenen Thread. Oder vielleicht, wenn Sie ein Tab-Steuerelement haben, dann geben Sie jeder Registerkarte einen eigenen Thread.

Update
.Net provides something called an AppDomain that you can use. It's more than a thread, but less than a process. If you have a from with multiple tab pages, you could create a custom control that holds the contents for each tab page and put each custom control in it's own assembly. Then those assemblies can be dynamically loaded into their own AppDomains. From there you should be able to create an instance of the control you want. However, there are certain rules about talking across appdomains, so I don't know that you'd be able to just add that control to a tab page on your form.

1
hinzugefügt
Joel, danke für die Antwort. 1 Thread pro Tab wird nicht funktionieren, es verhindert den Zweck des Sandboxing jedes Tabs in seinem eigenen Prozess, verhindert, dass es den Elternprozess abstürzt oder einfriert. Siehe Ryan's Antwort über Sandboxing.
hinzugefügt der Autor Judah Himango, Quelle

Der Grund dafür, dass chrome jeder Registerkarte einen eigenen Prozess gibt, ist Sandboxing. Wenn sich ein Tab fehlerhaft verhält, ist es weniger wahrscheinlich, dass der gesamte Browser gelöscht wird. Gibt es eine ähnliche Anforderung in Ihrer App?

Beachten Sie außerdem, dass Browser-Tabs keine Informationen freigeben müssen. Was sich auf einem Tab befindet, befindet sich auf einem Tab, und kein anderes Tab muss sich darum kümmern. Ist Ihre Winforms App ähnlich aufgeteilt?

0
hinzugefügt
Danke für die Antwort. Ich verstehe die gültigen Gründe für Sandboxing. Meine App ist ähnlich aufgeteilt, mit Tabs, die nicht voneinander wissen müssen, und alle sollten nicht in der Lage sein, den Elternprozess zum Absturz zu bringen.
hinzugefügt der Autor Judah Himango, Quelle