后台工人类和使用来自c#中不同类的进度事件传递消息

所以我有一个类在新的后台工作程序中启动一个新类,后台工作程序使用progresschanged部分传回状态消息。

当我尝试并通过键入使用它

classname.Dataworker.reportprogress(5) 

从一个单独的类我得到一个错误,我在定义之前使用一个对象。

我发现的例子都使用了单个类和不同的函数。

这可能是一个愚蠢的容易错误,但我只是看不到它,谢谢你能给予的任何帮助!

我的代码概述如下:

 //form class public static BackgroundWorker bw = new BackgroundWorker(); onbuttonclick { installer install = new installer(); bw.WorkerReportsProgress = true; bw.WorkerSupportsCancellation = true; bw.DoWork += class2.aFunction; bw.ProgressChanged += new ProgressChangedEventHandler(mainForm_InstallerEvent); bw.RunWorkerAsync(); } private void mainForm_InstallerEvent(object sender, ProgressChangedEventArgs e) { lbl.Text = e.UserState.ToString(); } 

//// class2后台工作者类

 aFunction { InstallerForm.bw.ReportProgress(5); //errors on this! } 

如果要执行以下操作,则需要使用UserState调用ReportProgress :

 lbl.Text = e.UserState.ToString(); 

然后你的电话会是这样的:

 aFunction { InstallerForm.bw.ReportProgress(5, "5% Complete"); } 

现在看起来你的e.UserState将为null,并且调用ToString()将导致空引用exception。
以下是UserState是文本的示例。

感谢您的帮助,在这些答案之间我发现我已经设法使其工作,我缺少的是:BackgroundWorker worker =(BackgroundWorker)sender;

然后用worker.reportprogress(..)引用该worker对象

我发现有用的指南是: http : //www.nerdparadise.com/tech/coding/csharp/backgroundworker/

完美,谢谢你们:)

后台工作线程使用ReportProgress将百分比值传递给Progress_Changed委托。 本文向您展示同步和异步的示例。

到目前为止,这是我懒惰的解决方法(因为我不想使用额外的事件处理程序)。 在那个时候我也不想理解用户;)所以我使用了包含所有警报/消息的列表来进行特定的长操作。 消息字符串保存在应用程序中强大的资源存储库App.Properties.Settings 。 由于ReportProgress采用整数,我将ReportProgress列表索引发送到Progress_Changed

示例:在do_work中调用了以下方法。

  private void LongOperation() { try { //the operation if (success){ //write a message to a status label bgWorker.ReportProgress(1); } else{ //write a message to a status label bgWorker.ReportProgress(2); } } catch(){...} } public void bgWorker_ProgressChanged(object sender, ProgressChangedEventArgs p) { int lstIndex = p.ProgressPercentage; lblStatus.Text = mssglist[lstIndex].ToString(); }