我刚刚开始学习 c# 中的线程和方法调用,但是我遇到了一个我找不到解决方案的问题。
我制作了一个基本的 C# 表单程序,它通过启动一个线程并调用委托来不断更新和显示一个数字。
在 Form1_load 上启动新线程:
private void Form1_Load(object sender, EventArgs e)
{
t = new System.Threading.Thread(DoThisAllTheTime);
t.Start();
}
Public void DoThisAllTheTime(不断更新数字):
public void DoThisAllTheTime()
{
while(true)
{
if (!this.IsDisposed)
{
number += 1;
MethodInvoker yolo = delegate() { label1.Text = number.ToString(); };
this.Invoke(yolo);
}
}
}
现在,当我单击表单的 X 按钮时,出现以下异常:
'System.Windows.Forms.dll 中发生'System.ObjectDisposedException' 类型的未处理异常
无法更新已删除的对象'
虽然我实际上确实检查了表格是否已处理。
编辑:我在解决问题的代码中添加了 catch (ObjectDisposedException ex)。工作代码:
public void DoThisAllTheTime()
{
while(true)
{
number += 1;
try {
MethodInvoker yolo = delegate() { label1.Text = number.ToString(); };
this.Invoke(yolo);
}
catch (ObjectDisposedException ex)
{
t.Abort();
}
}
}