c# winForm开发的一个异常问题,异常描述是:"调用的目标发生了异常问题"

我开发一个测试软件,每做一种测试就使用一个backgroundWorker,在backgroundWorker的RunWorkerCompleted事件里输出测试结果,然后触发下一个测试的backgroundWorker.RunWorkerAsync()事件!在我执行完最后一个测试之后,在RunWorkerCompleted事件里我想输出测试结果,再弹出一个MessageBox通过用户测试完毕,可以这里我加上了一个数据数据之后,软件会输出测试数据,然后就报错说"调用的目标发生了异常问题",这个异常是在Program.cs的Application.Run(new Form1());这一句报出来的,但是如果我不执行输出结果的操作,我的程序可以直接弹出对话框的操作,并且没有异常!谁能知道这是怎么事实??下面就是我的最后的测试backgroundWorker的RunWorkerCompleted事件代码:
private void backgroundWorker8_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{//APScan操作
if (errorState)
{//有错误信息
textBox1.AppendText("APScan操作发生错误,错误信息:" + errorMessage);
textBox1.AppendText(" " + "\n");
}
else
{//操作无错误
textBox1.AppendText("扫描结果:" + "\n");
textBox1.AppendText(" " + "\n");
for (int i = 0; i < al.Length; i++)
{
textBox1.AppendText("记录" + (i + 1).ToString() + "< SSID:" + al[i][0].ToString() + ",MAC地址:" + al[i][1].ToString() + ",信道号:" + al[i][2].ToString() + ",RRSI平均值:" + al[i][3].ToString() + ",RRSI最大值:" + al[i][4].ToString() + ",RRSI最小值:" + al[i][5].ToString() + ",响应率:" + al[i][6].ToString() + "%,测试时间:" + times);
textBox1.AppendText(" " + "\n");
}
}
MessageBox.Show("用户配置的操作已经全部完成!", "任务提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
}

如果注释掉textBox.appendText()的输出代码就是没错了!
异常的类是:TragetInvocationException
al是我用来传结果的ArrayList[] al;
经过测试,异常是在我的for循环里面,当输出了最后一条数据之后就会报出异常

backgroundWorker是线程吧

你的textbox1不是这个线程创建的,这个线程不能跨进程访问,简单的方法,用委托(invoke),把中间的结果实时的带出来显示
温馨提示:答案为网友推荐,仅供参考
第1个回答  2010-03-25
zzh_161 说得没错。.net2.0已经不像1.0可以跨线程调用窗体可视化控件了(出于安全考虑)。但提供了委托这一安全的方法。
Control.Invoke (Delegate, Object[])
用这个方法可以很简单的解决。
相似回答