我正在使用后台工作人员并将进度报告给进度条。
在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。
答案 0 :(得分:1)
我建议您将BackgroundWorker
替换为Task.Run
,然后使用IProgress<T>
/Progress<T>
for progress updates。
我有一篇博文compares progress reporting with BGW to that used by Task.Run
。