2016-03-02 39 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被调用的位置继续。由于它被称为线程中的最后一件事,线程将退出。