2008-10-14 9 views
7

double possible
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 Chromeonglets dans leur propre processus avec C# et WinForms

deux navigateur IE8 et Google Chrome ont separate processes for each tab that is opened.

Par exemple, vous lancez IE8 et ouvrez Yahoo et Google dans leurs propres onglets, vous vous retrouvez avec 3 processus en cours d'exécution sur votre système:

  • IE8 processus lui-même [processus maître]
    • Google processus onglet
    • Yahoo onglet processus

Je suis en train de jouer avec l'idée d'une chose similaire dans C#/WinForms. Prenez un exemple simple: J'ai un processus maître qui montre un formulaire, et j'ai un bouton dans un processus enfant. Comment pouvons-nous rendre le bouton de l'autre processus sur mon formulaire?

Répondre

1

Cela ne semble pas être une bonne idée. Les contrôles communs de winforms ne sont pas thread-safe pour la plupart, et donner à chaque contrôle son propre processus semble icky.

Si vous voulez essayer ceci, donnez-lui forme son propre processus, ou même juste son propre fil. Ou peut-être si vous avez un contrôle de tabulation, donnez simplement à chaque onglet son propre fil.

Mise à jour
.Net offre quelque chose appelé un AppDomain que vous pouvez utiliser. C'est plus qu'un fil, mais moins qu'un processus. Si vous disposez d'un fichier avec plusieurs pages à onglet, vous pouvez créer un contrôle personnalisé qui contient le contenu de chaque page à onglet et placer chaque contrôle personnalisé dans son propre assemblage. Ensuite, ces assemblys peuvent être chargés dynamiquement dans leurs propres AppDomains. De là, vous devriez être capable de créer une instance du contrôle que vous voulez. Cependant, il existe certaines règles sur la manière de parler entre les domaines d'application. Par conséquent, je ne sais pas si vous pouvez simplement ajouter ce contrôle à une page à onglet de votre formulaire.

+0

Joel, merci pour la réponse. 1 thread par onglet ne fonctionnera pas, il va à l'encontre du but de sandboxing de chaque onglet dans son propre processus, l'empêchant de planter ou de geler le processus parent. Voir la réponse de Ryan à propos du bac à sable. –

0

La raison pour laquelle chrome donne à chaque onglet son propre processus est sandboxing. Si un onglet se comporte de manière erronée, il est moins susceptible de supprimer le navigateur entier. Y a-t-il un besoin similaire dans votre application?

Notez également que les onglets du navigateur n'ont pas besoin de partager des informations. Ce qui est sur un onglet est sur un onglet et aucun autre onglet ne doit s'en soucier. Votre application WinForms est-elle divisée de la même manière?

+0

Merci pour la réponse. Je comprends le raisonnement valable derrière le bac à sable. Mon application est divisée de la même façon, avec des onglets qui n'ont pas besoin de se connaître les uns les autres, et tous ne devraient pas être capables de planter le processus parent. –

Questions connexes