2013-02-15 3 views
2

I'am получает действительно досадную ошибку каждый раз, когда я закрываю мое заявление, ошибка говорит мне:не может получить доступ к расположенному объекту с несколькими потоками

не может получить доступ к УТИЛИЗИРОВАТЬСЯ объект

Это только происходит, когда я закрываю приложение.

Это часть кода, где происходит ошибка:

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

Ошибка возникает на txtLog.AppendText между скобками либо еще. Это может иметь какое-то отношение к тем, которые я использую, код выше не работает в потоке, который я создал, только окна образуют поток, который работает в фоновом режиме, для проверки запущенных событий, отправляемого кода logtext к этому методу находится в другом внутреннем классе, который называется Serial, а затем он запускается из потока, кто-нибудь знает, как решить эту проблему?

Заранее благодарен!

+0

Что на самом деле является тип 'txtLog'? –

+0

это richtextbox. – Max

ответ

4

Проверьте IsDisposed свойство TextBox перед использованием:

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

Я не знаю, правильно ли это сделать, но он работает, спасибо. – Max

+1

@Mobstaa Dispose может быть вызван только в потоке пользовательского интерфейса, и этот код также выполняется в потоке пользовательского интерфейса, поэтому не должно быть никаких условий гонки. Но не забудьте вставить эту проверку до * обоих * вызовов в 'AppendText'. – Botz3000