2016-08-26 12 views
-3

私はいくつかのメッセージをRichTextBoxコントロールに記録しようとしています。それは、最初の2または3をログに記録し、その後、次のエラーがスローされます。"クロススレッド操作が無効です:作成されたスレッド以外のスレッドからアクセスされたコントロール。

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

は、これは1つだけのサブスクリプションを行う非常にシンプルなアプリです。スレッディングの試みはありませんでした。私はSOに見つかった別の質問パー

、私はStringBuilderのを使用しています:

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

を私が言ったように、私はちょうどlog("this is a log message")を呼び出すことができるように

public StringBuilder logtext = new StringBuilder(); 

は、その後、私は物事を単純化したかったですいくつかの文字列を正常にログに記録しますが、次にログを記録しようとします:

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

thそれがエラーを投げるときのat。ここではその値を返しているコードがある:それは場合に役立ちます

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

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

そして、ここでは、デバッガのSSです:MM:

enter image description here

TimeStamp()は文字通り」Hを返すという事実を無視してください:今ss.ffff」:)

は私が手動でlog("ConnectStatus: [1,\"Connected\",\"presence\"]")することができたし、それが働いていたので、私はそれが文字列の問題ではないと思います。スレッディングは本当に私を怒らせています。

​​

は、今では動作します:私は私のlog()方法を変更し、重複する質問に基づいて

+0

重複していませんが、実際にスレッドを使用しています。私は(私が知っている限りでは)そのスレッド全体に言及されている任意のタイプの呼び出しやスレッドを実行しているわけではありません。 –

+1

「pubnub」がスレッディングを使用していることは合理的な推測だと思います。 .NETがその例外を誤ってスローする既知の事例は、笑いのためだけに気づいていますか? 2番目のスレッドがあるかどうかについて完全な知識を持っている人は誰ですか:あなた、または.NETランタイム? –

+1

十分に.... –

答えて

0

関連する問題