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

Nat*_*ath 1 c# backgroundworker

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

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

classname.Dataworker.reportprogress(5)
Run Code Online (Sandbox Code Playgroud)

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

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

这可能是一个愚蠢的容易错误,但我只是看不到它,感谢您提供的任何帮助!

我的代码概述如下:

//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();
}
Run Code Online (Sandbox Code Playgroud)

//// class2后台工作者类

aFunction
{
        InstallerForm.bw.ReportProgress(5); //errors on this!
}
Run Code Online (Sandbox Code Playgroud)

SwD*_*n81 6

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

lbl.Text = e.UserState.ToString();
Run Code Online (Sandbox Code Playgroud)

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

aFunction
{
        InstallerForm.bw.ReportProgress(5, "5% Complete");
}
Run Code Online (Sandbox Code Playgroud)

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