我已经制作了一个示例程序,它在后台线程上生成每秒2000个整数,当它结束时它会触发一个事件,它从随机生成的数据在GUI上绘制图形(我有在我的线程内模拟真实测量的睡眠)。从后台访问GUI线程
private void SetChart(System.Windows.Forms.DataVisualization.Charting.Series series)
{
if (InvokeRequired)
{
SetChartCallback d = new SetChartCallback(SetChart);
this.Invoke(d, new object[] { series });
}
else
{
chart1.Series[0] = series;
chart1.Series[0].Name = "Generated Data";
}
}
我在MSDN站点上找到了这种方法。它工作正常,唯一的问题是,当我关闭应用程序。有时出现错误消息:
无法访问处置的对象。
对象名称:'Form1'。
当我关闭程序时,它会处理所有的元素,我怎样才能防止这个错误发生?
推荐的方法是不让表单关闭,直到完成所有后台线程。例如禁用关闭黄油,或重写关闭事件以通知用户当前正在背景中发生的事情,并稍后再试。否则,如果让表单关闭,它将在后台处理仍然发生时消失... – 2013-02-25 23:46:09
现在我正在检查Thread.IsAlive布尔值,但是如果它返回true并且我调用thread.Join() - 程序冻结,没有任何反应。 – patex1987 2013-02-26 00:07:25
你在哪里调用thread.join?如果你在表单关闭时调用它,它会阻塞,直到你的后台线程完成 - 这就是Join所做的。 – 2013-02-26 00:14:18