2016-08-26 24 views
-3

我正在嘗試將一些消息記錄到RichTextBox控件。它記錄的第2或3,那麼將引發以下錯誤:「跨線程操作無效:從其創建線程以外的線程訪問的控件。」

"Cross-thread operation not valid: Control 'txtLog' accessed from a thread other than the thread it was created on."

這是一個非常簡單的應用程序,只是做一個訂閱。沒有嘗試穿線。

每一個問題我發現SO,我使用一個StringBuilder:

public StringBuilder logtext = new StringBuilder(); 

然後我想簡化事情,所以我可以只是調用log("this is a log message")

public void log(string txt) 
    { 
     logtext.Append(Environment.NewLine + txt); 
     txtLog.Text = logtext.ToString(); 
    } 

就像我說的,它會記錄幾條細線,但會嘗試記錄以下內容:

"ConnectStatus: [1,\"Connected\",\"presence\"]"

th當它拋出錯誤時。這裏是一個返回了值的代碼:

pubnub.Subscribe<string>(
    chnl, 
    DisplayReturnMessage, 
    DisplayConnectStatusMessage, 
    DisplayErrorMessage 
); 

public void DisplayReturnMessage(string result) 
{ 
    log(TimeStamp() + " Result: " + result); 
} 

,這裏是調試器的SS如果有幫助:

enter image description here

請忽略的事實是TimeStamp()字面上返回「H:MM :ss.ffff「現在:)

我能夠手動log("ConnectStatus: [1,\"Connected\",\"presence\"]")它工作,所以我不認爲這是一個字符串問題。穿線的東西真的把我拋棄了。

+0

不是重複的,他實際上是在使用線程。我不是(據我所知)線程或做任何類型的調用,這在整篇文章中都有提及。 –

+1

我認爲'pubnub'使用線程是一個合理的推論。你知道任何已知的情況下,.NET錯誤地拋出異常,只是爲了笑嗎?誰更有可能完全瞭解是否有第二個線程:您或.NET運行時? –

+1

夠公平的.... –

回答

0

基於重複的問題,我修改了log()方法:

​​

現在,它的工作原理。

相關問題