2016-03-02 77 views
0

這裏就是我想要做的事:保持一個後臺線程活着,而它是從另一個線程監聽事件

不阻塞主線程,我想用Awesomium.NET加載一個網頁,操作DOM並做一些處理,然後將一些數據返回到主線程。

在我的後臺線程,我創建了一個WebView(實質上代表在Web瀏覽器選項卡),然後訂閱其LoadingFrameComplete事件(火災時WebView加載指定的URL)。然後我開始加載URL。

問題是,加載的URL不會阻止當前的線程。這意味着在後臺線程通知WebView加載URL後,線程完成。

一旦WebView實際完成加載URL,正在偵聽LoadingFrameComplete事件的後臺線程不再有效,因此它不能執行數據處理。

當然,這意味着沒有數據被返回到用於顯示的主線程..

任何建議,將不勝感激。

+0

我不知道這個產品,但是爲什麼你在線程中沒有這樣做,就像在鏈接網站的代碼片段中顯示的那樣? 'while(view-> IsLoading())core-> Update();'看起來就像是循環一直處理直到加載完成... –

+0

@DarkFalcon嗯,我會被詛咒的......我以某種方式設法錯過了那部分。它工作完美。不幸的是,'WebCore#Update'已棄用,並將在下一版本中刪除。 當我在主線程上運行這個東西來熟悉Awesomium時,我已經將整個事情工作得更早了。 我這樣做的方式是通過正確(不知不覺地)使用「WebCore#Update」的替換。但是,當我將它移動到後臺線程時,我並不知道我應該做的額外事情。 一旦我運行,我會發布解決方案,如果沒有人發佈了合適的答案。 謝謝:) –

回答

0

感謝Dark Falcon的評論,我能找到解決我的問題的方法。

事實證明,這就像撥打WebCore#RunWebCore#Shutdown一樣簡單。

創建後臺線程並在該線程上創建WebView,訂閱LoadingFrameComplete事件,初始化網頁加載,然後致電WebCore#Run
這使線程運行,直到調用WebCore#Shutdown

LoadingFrameComplete事件處理程序中,執行處理,然後調用WebCore#Shutdown。這會導致線程從WebCore#Run被調用的位置繼續。由於它被稱爲線程中的最後一件事,線程將退出。