2013-02-15 41 views
2

我'每次我關閉我的應用程序時得到一個非常惱人的錯誤,該錯誤告訴我:不能存取權限多線程釋放的對象

無法訪問已釋放的對象

這只是當我關閉我的應用程序時發生。

這是發生錯誤的部分的代碼:在其他括號之間的txtLog.AppendText發生

/// <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"); 
    } 
} 

該錯誤。 它可能與我使用的線程有關,上面的代碼沒有在我創建的線程中運行,只有在後臺運行的窗體窗體線程檢查觸發的事件,發送的代碼對此方法的logtext是在另一個名爲Serial的內部類中,然後它從一個線程運行,有沒有人有任何想法如何解決這個問題?

在此先感謝!

+0

什麼是真正的'txtLog'的類型? – 2013-02-15 08:22:24

+0

它是一個richtextbox。 – Max 2013-02-15 08:53:44

回答

4

使用前檢查TextBox的IsDisposed屬性:

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

我不知道這是否是正確的方式,但它確實有用,謝謝。 – Max 2013-02-15 08:23:32

+1

@Mobstaa Dispose只能在UI線程上調用,並且此代碼也在UI線程上執行,所以應該沒有競爭條件。但是,不要忘記在兩個*調用AppendText之前插入該檢查。 – Botz3000 2013-02-15 08:26:12