后台工作者:在执行RunWorkerCompleted之前确保ProgressChanged方法已经完成假设我正在使用后台工作者并且我有以下方法:privatevoidbw_DoWork(objectsender,DoWorkEventArgse){finalData=MyWork(senderasBackgroundWorker,e);}privatevoidbw_ProgressChanged(objectsender,ProgressChangedEventArgse){inti=e.ProgressPercentage;//MissedforiDebug.Print("BWProgressChangedBegin,i:"+i+",ThreadId:"+Thread.CurrentThread.ManagedThreadId);//我用它来更新表格和XY-Plot,以便用户可以看到进度。UpdateGUI(e.UserStateasMyData);Debug.Print("BWProgressChangedEnd,i:"+i+",ThreadId:"+Thread.CurrentThread.ManagedThreadId);}privatevoidbw_RunWorkerCompleted(objectsender,RunWorkerCompletedEventArgse){if((e.Cancelled==true)){//取消}elseif(!(e.Error==null)){MessageBox.Show(e.Error.信息);}else{Debug.Print("BWRunWorkerCompletedBegin,ThreadId:"+Thread.CurrentThread.ManagedThreadId);//我用它来更新表格和XY-Plot,//以便用户可以看到最终数据。UpdateGUI(finalData);Debug.Print("BWRunWorkerCompletedEnd,ThreadId:"+Thread.CurrentThread.ManagedThreadId);}}现在我假设bw_RunWorkerCompleted方法在调用bw_RunWorkerCompleted方法之前完成但它没有,我不明白为什么?我得到以下输出:Worker,i:0,ThreadId:27BWProgressChangedBegin,i:0,ThreadId:8BWProgressChangedEnd,i:0,ThreadId:8Worker,i:1,ThreadId:27BWProgress更改开始,i:1,ThreadId:8BW进度更改结束,i:1,ThreadId:8Worker,i:2,ThreadId:27BW进度更改开始,i:2,ThreadId:8BW运行Worker完成开始,ThreadId:8BWRunWorkerCompletedEnd,ThreadId:8mscorlib.dll中发生类型为“System.InvalidOperationException”的第一次机会异常错误<--集合已修改;枚举操作可能无法执行。错误<--NationalInstruments.UI.WindowsForms。Graph.ClearData()MagagedID8是MainThread,27是WorkerThread。我可以在Debug/Windows/Threads中看到这一点。如果我不在bw_ProgressChanged方法中调用UpdateGUIint,则不会发生错误。但是随后用户在表格和XY图中看不到任何进展。将MyWork方法编辑为如下所示:publicMyData[]MyWork(BackgroundWorkerworker,DoWorkEventArgse){MyData[]d=newMyData[n];对于(inti=0;i
