RunWorkerCompletedEventArgs对象中如何设置UserState?大家好。我有一组运行Worker类实例的BackgroundWorker对象。当我调用Worker类时,对象实例执行它然后用完代码(循环结束)。我能够监听RunWorkerCompleted()事件,但是当它调用我设置的委托时,我需要知道我的哪些Worker对象刚刚完成。我在RunWorkerCompletedEventArgs中看到一个来自我的委托的UserState属性,但我不知道如何在我的Worker对象中设置它,因为它正在完成。有任何想法吗?我的WorkManager.cs类中的片段publicWorkerAddWorker(){Workerw=newWorker();_workers.Add(w.WorkerID,w);BackgroundWorkerbg=newBackgroundWorker();_bgworkers.Add(bg);bg.DoWork+=w.Start;bg.WorkerReportsProgress=true;bg.WorkerSupportsCancellation=true;bg.ProgressChanged+=ProcessWorkerMessage;bg.RunWorkerCompleted+=WorkerFinished;w.WorkManager=这个;w.BackgroundWorker=bg;bg.RunWorkerAsync(w);返回w;}publicvoidWorkerFinished(objectsender,RunWorkerCompletedEventArgse){if(_onManagerEvent!=null)_onManagerEvent(newManagerEvent{EventDate=DateTime.Now,Message="Worker???成功结束。"});因此,当我的Worker对象在其Start()方法中完成循环时,我该怎么做才能填充传递给我的WorkerFinished方法()的RunWorkerCompleteEventArgs对象“e”的userState属性?谢谢Worker类上的Start方法可以设置DoWorkEventArgs参数的Result属性。这是一个示例:voidStart(objectsender,DoWorkEventArgse){//执行循环和其他工作。e.Result=这个;然后在完成事件处理程序中,您可以检索e.Result:publicvoidWorkerFinished(objectsender,RunWorkerCompletedEventArgse){//在检查e.Result之前,您应该始终检查e.Cancelled和e.Error!//...即使我在这里跳过了Workerw=e.ResultasWorker;if(w!=null){if(_onManagerEvent!=null)_onManagerEvent(newManagerEvent{EventDate=DateTime.Now,Message=String.Format("Worker{0}成功结束。",w.ToString())});}}UserState是UserState的一个已知错误:http://www.pluralsight-training.net/community/blogs/mike/archive/2005/10/21/15783.aspx(archive.org链接...原始链接是死了)当我遇到你的情况时,我过去所做的是使用RunWorkerCompletedEventArgs.Result(如Philip建议的那样),或者,如果可能的话,让我的工作人员从BackgroundWorker派生(然后我可以添加尽可能多的额外状态想要,并让整个工作人员作为BackgroundWorker引发的事件的发送者参数,同时仍然能够将结果用于其预期目的)。以上就是C#学习教程:如何在RunWorkerCompletedEventArgs对象中设置UserState?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
