【发布时间】:2012-10-24 20:07:05
【问题描述】:
我选择为我目前正在开发的应用程序使用BackgroundWorker 的唯一原因是将通过WebBrowser 进行的冗长耗时的浏览从 UI 线程中移开。
但是WebBrowser.Navigate() 不是在访问 UI 吗?
换句话说,我经历了所有这些努力,只是落在了同一个地方(或者更糟!因为我不知道非 UI 线程在访问 UI 控件时会产生什么副作用)。
我很确定我不是第一个想要实现这样的东西的人,所以我的问题是:解决这个问题的可接受方法是什么?即从BackgroundWorker到WebBrowser.Navigate()?
【问题讨论】:
-
Navigate()不是阻塞调用。 -
@SLaks 你是什么意思?我实际上可以看到,在(缓慢)加载网站页面时,表单的按钮和 UI 没有响应。这是从
worker_DoWork(object sender, DoWorkEventArgs e)调用WebBrowser.Navigate()。 -
@ateiob BackgroundWorker 的评论特别指出'您必须小心不要在 DoWork 事件处理程序中操纵任何用户界面对象。相反,通过 BackgroundWorker 事件与用户界面进行通信。'
-
@Munchies 这正是我在 OP 中提出的问题:如何“通过 BackgroundWorker 事件与用户界面通信”?跨度>
-
@ateiob 你想发生什么?您通常会在 ProgressChanged 或 RunWorkerCompleted 事件处理程序中与 UI 交互。我不知道您为什么要尝试将后台工作人员用于单个方法调用。
标签: c# winforms webbrowser-control backgroundworker