2008-10-14 95 views
7

可能重複
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上?

回答

1

這聽起來不像這樣一個好主意。 WinForms的通用控件大部分不是線程安全的,並且給每個控件它自己的過程看起來很瑣碎。

如果你想試試這個,或許給每個表格它是自己的過程,甚至只是它自己的線程。或者,如果你有一個選項卡控制,然後只是給每個選項卡自己的線程。

更新
.Net提供了一種您可以使用的稱爲AppDomain的東西。它不僅僅是一個線程,而是一個過程。如果您有多個選項卡頁面,則可以創建一個自定義控件,以保存每個選項卡頁面的內容,並將每個自定義控件放入其自己的程序集中。然後這些程序集可以動態加載到他們自己的AppDomain中。從那裏你應該能夠創建你想要的控件的一個實例。但是,有關通過appdomains進行交談的一些規則,所以我不知道您只能將該控件添加到表單上的選項卡頁面。

+0

喬爾,謝謝你的回答。每個選項卡上的1個線程將不起作用,這會破壞在其自己的進程中對每個選項卡進行沙盒處理的目的,從而防止其崩潰或凍結父進程。請參閱Ryan關於沙盒的回答。 – 2008-10-14 15:47:59

0

鉻爲每個選項卡提供自己的進程的原因是沙盒。如果一個選項卡的行爲錯誤,則不太可能取下整個瀏覽器。您的應用中是否有類似的需求?

此外,請注意,瀏覽器選項卡不需要共享信息。選項卡上的內容是在選項卡上,沒有其他選項卡需要關心它。您的Winforms應用程序是否有類似的分歧

+0

感謝您的回答。我理解沙箱背後的有效推理。我的應用程序也是類似的,它們之間不需要了解對方的標籤,所有應用程序都不應該會導致父進程崩潰。 – 2008-10-14 15:43:54