【发布时间】:2011-03-28 12:48:14
【问题描述】:
我需要在每个循环中从我的后台工作人员返回多个 STRING 值,因此我尝试使用 ReportProgress 第二个参数作为字符串数组。代码示例:
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
string[] workerResult = new string[2];
for (int i=0; i<someNumber; i++)
{
//do some heavy calculating
workerResult[0] = "this string";
workerResult[1] = "some other string";
backgroundWorker1.ReportProgress(i, workerResult) // also tried workerResult[] and [2]
}
}
private void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
string[] results = (string[])e.UserState;
MessageBox.Show(results[0]); // line of error
MessageBox.Show(results[1]); // line of error
}
它可以编译,但在运行时,当我尝试访问用户状态返回的字符串时,我收到一个错误:“对象引用未设置为对象的实例。”
对我来说,在将数组参数传递给 ProgressChanged 委托时,或者在尝试设置结果数组值时在 ProgressChanged 方法中似乎有问题。
【问题讨论】:
-
您运行
backgroundWorker2但报告backgroundWorker1是否有更深层次的原因? -
另外,为什么使用字符串数组而不是集合?
-
对不起,我的错误。示例错误,现在应该是正确的。
标签: c# .net backgroundworker