让自定义Prompt窗体中在BackgroundWorker中使用COM组件WebBrowser

Prompt Window的实现:

解释:

从实现的第一行线程的代码可以看出,Prompt运行的内容所在的线程需要使用STA模式,如果开发时不使用像WebBrowser这样的COM的话,可以忽略这行代码,关于STA与MTA的解释在这里(http://stackoverflow.com/questions/127188/could-you-explain-sta-and-mta)可以找到。重点核心的代码就是prompt.ShowDialog()以及它下面的一行,ShowDialog会显示窗体,代码停留在这里直到窗体被关闭。当窗体关闭时,可以把窗体内的文本返回,而这里所返回的是浏览器的Cookie信息。

让WebBrowser在BackgroudWorker中工作:

解释:

假设上面的代码在BackgroundWorker中运行,时不时地就会有异常发生,原因是BackgroundWorker本身的线程模式不是STA。所以需要从当前位置新开启一个STA模式的,为了让代码暂时停留直到窗体关闭,用Join进行阻塞。Thread构造函数中所使用的是匿名访问。

你可能感兴趣的:(background)