无法使用多个线程访问已处置的对象

时间:2013-02-15 08:16:35

标签: c# multithreading winforms visual-studio

每次关闭我的应用程序时,我都会收到一个非常恼人的错误,错误告诉我:

  

无法访问已处置的对象

只有当我关闭我的应用程序时才会发生这种情况。

这是发生错误的部件代码:

/// <summary>
/// Method that shows a log to the user, about what is happening behind scenes.
/// </summary>
/// <param name="logtext"></param>
public void DisplayLog(string logtext)
{
    if (this.txtLog.InvokeRequired)
    {
        Invoke(new MethodInvoker(delegate()
            {
                txtLog.AppendText(logtext + "\n\n");
            }));
    }
    else
    {
        txtLog.AppendText(logtext + "\n\n");
    }
}

错误发生在else括号之间的txtLog.AppendText上。 它可能与我使用的线程有关,上面的代码没有在我创建的线程中运行,只有windows形成在后台运行的线程来检查被触发的事件,发送的代码这个方法的logtext在另一个名为Serial的内部类中,然后它从一个线程运行,是否有人知道如何解决这个问题?

提前致谢!

1 个答案:

答案 0 :(得分:4)

在使用之前检查TextBox的IsDisposed属性:

if (!txtLog.IsDisposed) {
    txtLog.AppendText(logtext + "\n\n");
}