由于需要在窗口的load事件中就开始业务,为了使窗口可以显示,不至于阻塞而看不到窗体,在load事件中使用了多线程处理业务,这样窗口就可以显示了。为了改变窗体中的控件状态,使用了一个委托 public delegate void print_msgs(string msg);
public void print_msg(string msg)
{
if (this.textBox1.InvokeRequired)
{
print_msgs s = new print_msgs(print_msg);
this.Invoke(s, new object[] { msg });
}
else
{
this.textBox1.AppendText(msg + (char)13 + (char)10);
}
}
现在有一个问题,在线程中使用了Application.Restart()将应用程序重启,但重启后线程还没有中止,而是继续访问控件,造成异常“无法访问已释放的对象。对象名:“TextBox”。”对应的是这句this.textBox1.AppendText(msg + (char)13 + (char)10);,请问如何才能达到这个功能,在子线程中重启主业务,并且可以按计划执行预计业务
public void print_msg(string msg)
{
if (this.textBox1.InvokeRequired)
{
print_msgs s = new print_msgs(print_msg);
this.Invoke(s, new object[] { msg });
}
else
{
this.textBox1.AppendText(msg + (char)13 + (char)10);
}
}
现在有一个问题,在线程中使用了Application.Restart()将应用程序重启,但重启后线程还没有中止,而是继续访问控件,造成异常“无法访问已释放的对象。对象名:“TextBox”。”对应的是这句this.textBox1.AppendText(msg + (char)13 + (char)10);,请问如何才能达到这个功能,在子线程中重启主业务,并且可以按计划执行预计业务
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货