2011-11-09 27 views
0

我一直在閱讀和處理單個UI線程,因爲有不止一個會搞砸消息等等。谷歌瀏覽器有多個進程,那麼UI線程呢?

我在這裏回答我自己的問題,但想驗證我對Chrome瀏覽器的瞭解有多個進程(每個標籤一個) - 它是否也通過使用多個UI線程在渲染部分加速了一些?

我的猜測是沒有,但如果它確實知道或看看一些示例c#代碼演示相同(不必是web瀏覽器演示)將是非常有趣的。

多UI線程方向中的任何指針都會有幫助!謝謝。

回答

2

不要混淆線程和進程。每個進程都有它自己的UI線程,但也可能是它自己的消息泵。

+0

是的,我同意概念。谷歌Chrome瀏覽器的整合方式使其更加有趣。如果有一個evetnually過程,做別人之間的協調,如果它擁有一個UI線程,以及等等等等,因此這個問題。 – dotnetcoder

3

我不能明確的狀態如何鉻處理的渲染線程 - 但我會假設每個標籤都有自己的渲染線程。我不會看到將製表符分離的所有努力的重點,只是將它們全部綁定在一個共同的渲染線程上。他們都有機會互相干擾。

我實現使用WPF一個「鉻式」瀏覽器 - 應用程序殼是一個單一的過程,則每個「標籤」是一種MAF外接程序在一個單獨的進程中運行。渲染全部在子進程中 - 沒有任何共享。每個AddIn都返回一個INativeHandleContract(一個WPF控件),它在整個流程邊界上傳遞。

這樣做的結果是任何一個例外情況在一個子選項卡中只會取下選項卡,並且可能被父進程檢測到,給它提供一些反饋/重新加載標籤等的機會等。

本文wasnt,當我實現它,但一個快速瀏覽後,我覺得它有一些指針: http://msdn.microsoft.com/en-us/library/bb909794.aspx

肯特Boogaart還借給一臂之力 http://kentb.blogspot.com/2008/06/maf-gymnastics-service-provider.html

您可能還需要從這個QFE微軟修復序列化跨進程邊界傳遞WPF控件時,您可能會遇到一個錯誤: http://archive.msdn.microsoft.com/KB982638 在問候MS連接錯誤:https://connect.microsoft.com/VisualStudio/feedback/details/467381/wpf-controls-cannot-be-passed-across-process-boundaries

+1

線程不提供任何隔離。您無法從一個線程捕獲異常並恢復該過程。 –

+0

這是正確的 - 這就是爲什麼我的代碼具有「每個‘標籤’是一個MAF外接程序在一個單獨的進程中運行」 - 允許對未處理的異常鉻般的彈性。 – Adam