【发布时间】:2014-07-09 23:33:59
【问题描述】:
我正在使用后台工作人员并将进度报告到进度条。
在 BackgroundWorker DoWork 事件中,我在每个方法完成时调用了几个方法。我实际上是在更新运行良好的进度值。
但是,当我在 DoWork 中调用异步方法时,在调用结束后,我正在用我想要的值更新进度值 - 但它向我抛出了一个异常,上面写着:
“操作已经完成”只有当我调用 “异步方法”。
这是我的代码:
LoginBackgroundThreadReport(20, "Requesting Token");
long _StatusCode = await RequestNewToken();
LoginBackgroundThreadReport(30, "Configuring Device");
//LoginBackgroundThreadReport method
private void LoginBackgroundThreadReport(int pValue, string pMessage, long pStatusCode = 0)
{
object[] _arr = new object[2];
_arr[0] = pMessage;
_arr[1] = pStatusCode;
LoginBackgroundWorker.ReportProgress(pValue, _arr);
}
此处显示“请求令牌”,但“配置设备”失败,因为我在调用异步方法后更新值 30,该方法将我的进度值自动更新为 100。
【问题讨论】:
-
为什么需要调用
RequestNewTokenasync?您已经在与 GUI 不同的线程上,您只需要在步骤完成后报告进度。 -
哪个方法抛出异常?
-
RequestNewToken 是我的公共类中的一个方法,它在多个地方使用,所以我没有必要修改它,所以就以同样的方式使用它。
-
总之终于找到了解决办法 这是我提到的链接stackoverflow.com/questions/5095183/…
-
您实际上是否有长时间运行的 CPU 绑定工作,或者是唯一长时间运行的操作受限于 IO?如果是这样,只需删除 BGW 并直接在 UI 线程中运行代码就可以了,这要归功于异步。
标签: c# async-await backgroundworker