C# 无法使用多个线程访问已释放的对象
每次关闭应用程序时,我都会遇到一个非常恼人的错误,错误告诉我: 无法访问已释放的对象 只有当我关闭应用程序时才会发生这种情况 这是发生错误的零件代码:C# 无法使用多个线程访问已释放的对象,c#,multithreading,winforms,visual-studio,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
/// <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");
}
}
//
///方法,该方法向用户显示有关幕后发生的事情的日志。
///
///
公共void显示日志(字符串logtext)
{
if(this.txtLog.invokererequired)
{
调用(新的MethodInvoker(委托)()
{
txtLog.AppendText(logtext+“\n\n”);
}));
}
其他的
{
txtLog.AppendText(logtext+“\n\n”);
}
}
错误发生在else括号之间的txtLog.AppendText
上。
它可能与我正在使用的线程有关,上面的代码不是在我创建的线程中运行的,只有windows窗体线程在后台运行以检查触发的事件,向此方法发送logtext
的代码在另一个名为Serial
的内部类中,然后它从一个线程运行,有人知道如何解决这个问题吗
提前谢谢 使用文本框之前,请检查其属性:
if (!txtLog.IsDisposed) {
txtLog.AppendText(logtext + "\n\n");
}
在使用文本框之前,请检查其属性:
if (!txtLog.IsDisposed) {
txtLog.AppendText(logtext + "\n\n");
}
txtLog
的实际类型是什么?txtLog
的实际类型是什么?我不知道这样做是否正确,但它确实有效,谢谢。@Mobstaa Dispose只能在UI线程上调用,并且此代码也在UI线程上执行,因此应该没有争用条件。但是不要忘记在两次调用AppendText
之前插入该检查。我不知道这是否是正确的方法,但它确实有效,谢谢。@Mobstaa Dispose只能在UI线程上调用,并且该代码也在UI线程上执行,因此不应该存在争用条件。但不要忘记在调用AppendText
之前插入该检查。