BackgroundWorker_DoWork:调用Async方法时,操作已经完成

时间:2014-07-03 07:35:38

标签: c# async-await backgroundworker

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

1 个答案:

答案 0 :(得分:1)

我建议您将BackgroundWorker替换为Task.Run,然后使用IProgress<T>/Progress<T> for progress updates

我有一篇博文compares progress reporting with BGW to that used by Task.Run