Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# BackgroundWorker\u DoWork:调用异步方法时,操作已完成_C#_Async Await_Backgroundworker - Fatal编程技术网

C# BackgroundWorker\u DoWork:调用异步方法时,操作已完成

C# BackgroundWorker\u DoWork:调用异步方法时,操作已完成,c#,async-await,backgroundworker,C#,Async Await,Backgroundworker,我正在使用后台工作人员并向进度条报告进度。 在BackgroundWorkerDoWork事件中,我在每个方法完成后调用几个方法。我确实在更新进度值,效果很好 但是,当我在DoWork中调用一个异步方法时,在调用结束后,我正在用所需的值更新进度值-但它向我抛出一个异常,该异常表示: “操作已完成”仅当我调用 “异步方法” 这是我的代码: LoginBackgroundThreadReport(20, "Requesting Token"); long _StatusCode = await R

我正在使用后台工作人员并向进度条报告进度。 在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。

我建议您将
BackgroundWorker
替换为,并使用


我有一篇博文是这样写的。

为什么需要调用
RequestNewToken
async?您已经在GUI的一个单独线程上,只需在完成该步骤时报告进度。哪个方法引发异常?RequestNewToken是我的公共类中的一个方法,在多个位置使用,因此我没有必要修改它,所以只需以相同的方式使用它。总之,找到了一个解决方案最后,这里是我提到的链接,您是否真的有长时间运行的CPU绑定工作,或者是唯一有IO绑定的长时间运行操作?如果是这样,只需删除BGW并在UI线程中运行代码,就可以了,这要感谢异步。