C# BackgroundWorker\u DoWork:调用异步方法时,操作已完成
我正在使用后台工作人员并向进度条报告进度。 在BackgroundWorkerC# BackgroundWorker\u DoWork:调用异步方法时,操作已完成,c#,async-await,backgroundworker,C#,Async Await,Backgroundworker,我正在使用后台工作人员并向进度条报告进度。 在BackgroundWorkerDoWork事件中,我在每个方法完成后调用几个方法。我确实在更新进度值,效果很好 但是,当我在DoWork中调用一个异步方法时,在调用结束后,我正在用所需的值更新进度值-但它向我抛出一个异常,该异常表示: “操作已完成”仅当我调用 “异步方法” 这是我的代码: LoginBackgroundThreadReport(20, "Requesting Token"); long _StatusCode = await R
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。我建议您将
BackgroundWorker
替换为,并使用
我有一篇博文是这样写的。为什么需要调用
RequestNewToken
async?您已经在GUI的一个单独线程上,只需在完成该步骤时报告进度。哪个方法引发异常?RequestNewToken是我的公共类中的一个方法,在多个位置使用,因此我没有必要修改它,所以只需以相同的方式使用它。总之,找到了一个解决方案最后,这里是我提到的链接,您是否真的有长时间运行的CPU绑定工作,或者是唯一有IO绑定的长时间运行操作?如果是这样,只需删除BGW并在UI线程中运行代码,就可以了,这要感谢异步。