Tabele în propriul proces cu C # și WinForms

Duplicat posibil
   Aplicația Windows Forms ca Google Chrome cu mai multe procese < br>    Designul multi-proces Chrome/IE8, este posibil în .NET?
   Exemplu pentru aplicația C# multi-proces ca Google Chrome

Atât browserul IE8, cât și browserul Google Chrome au procese separate pentru fiecare filă care se deschide .

De exemplu, lansați IE8 și deschideți Yahoo și Google în filele proprii, veți termina cu 3 procese care rulează pe sistemul dvs.:

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

Mă gândesc la ideea unui lucru similar în C #/WinForms.

Luați un exemplu simplu: am un proces master care arată o formă și am un buton într-un proces copil. Cum putem face Butonul din celălalt proces pe Formularul meu?

7

2 răspunsuri

Asta nu pare o idee bună. Controalele comune ale winforms sunt, în cea mai mare parte, nu în condiții de siguranță a firului și dând fiecărui control propriul proces pare a fi icy.

Dacă doriți să încercați acest lucru, dați fiecărui formular propriul proces, sau chiar dacă este vorba doar de propriul fir. Sau, poate, dacă aveți un control tab, dați fiecărei file propriul fir.

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
adăugat
Joel, mulțumesc pentru răspuns. Un fir pe fila nu va funcționa, acesta învinge scopul de a împrăștia fiecare tabă în propriul proces, împiedicând-o să prăbușească sau să înghețe procesul de mamă. Vedeți răspunsul lui Ryan despre sandboxing.
adăugat autor Judah Himango, sursa

Motivul pentru care cromul dă fiecare filă propriului proces este sandboxing. Dacă o filă se comportă errant, este mai puțin probabil să eliminați întregul browser. Există o nevoie similară în aplicația dvs.?

De asemenea, rețineți că filele browserului nu trebuie să partajeze informații. Ceea ce se află pe o filă este pe o filă și nici o altă filă nu trebuie să aibă grijă de ea. Aplicația winforms este în mod similar împărțită?

0
adăugat
Multumesc pentru raspuns. Înțeleg raționamentul valid din spatele sandbox-ului. Aplicația mea este împărțită în mod similar, cu file care nu trebuie să știe unul despre celălalt și nu ar trebui să fie capabil să prăbușească procesul părinte.
adăugat autor Judah Himango, sursa