C#的UI线程是独立于其他线程的,对UI控件的操作必须在UI线程中执行,这是由GUI整体架构决定的。(其他语言如VC++/Java的机制也一样) 如果需要在其他线程中访问UI控件: 1. BackgroundWorker比较常用,所有UI控件可以ProgressChanged 以及 WorkCompleted事件中访问,打开ProgressReported开关,编写ProgressChanged以及WorkCompleted事件。(针对你的需求,可以在ProgressChanged中访问WebBrowser控件的状态,并赋值到某个普通变量中,然后在BackgroundWorker.DoWork中访问。对多次访问UI控件状态的情况很方便,每次ProgressChanged事件参数设置要执行的指令及传入参数) 2. 异步事件,包括BeginInvoke及EndInvoke一对操作,单次操作很简洁。(对多次访问UI控件状态不是太方便,每次都要调用这一对操作) 3. 多次重复简单执行可以考虑Timer,会在UI线程中执行操作,效率不高,耗时的方法体操作会卡住界面。
我在ProgressChanged 里创建了几个webbrowser会卡主界面,请问如何解决因为我要得到这个webbrowser html源码
现在有的页面都是按照需要加载内容的,页面拉倒最下面才加载 你要抓取的内容根本没到你的客户机,怎么抓取 不过,只要用心,或许总有办法,这里支持一下 非UI线程里webbrowser出问题,那你为什么不放到UI里面处理呢? 给你推荐个可以替代webbrowser的东西geckofx,比前者好使。具体自己搜索下
110,569
社区成员
642,568
社区内容
加载中
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧