2016-08-26 1 views
-3

RichTextBox 컨트롤에 일부 메시지를 기록하려고합니다. 이것은 단지 하나의 가입을하는 매우 간단한 응용 프로그램은"크로스 스레드 작업이 유효하지 않습니다 : 생성 된 스레드 이외의 스레드에서 액세스 된 컨트롤입니다."

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

: 그것은 처음 2 또는 3 로그온 한 후 다음과 같은 오류가 발생합니다. 스레딩 시도가 없었습니다. 내가 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 오류가 발생했을 때 도움이된다면 여기

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 "now :

나는 수동으로 log("ConnectStatus: [1,\"Connected\",\"presence\"]")을 사용할 수 있었고 효과가있어서 문자열 문제라고 생각하지 않습니다. 실을 꿰고있는 것은 정말로 나를 쫓아 내고있다.

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

지금 작동 : 중복 된 질문을 바탕으로

+0

실제로 중복되지는 않지만 실제로 스레드를 사용하고 있습니다. 나는 (내가 알고있는 한, 모든 게시물에 언급 된) 모든 유형의 호출 또는 스레딩을하지는 않습니다. –

+1

''pubnub''가 스레딩을 사용하고 있다는 것이 합리적이라고 생각합니다. .NET이 그 예외를 실수로 throw하는 알려진 사례를 알고 계십니까? 두 번째 스레드가 있는지 여부에 대한 완전한 지식을 가진 사람은 누구입니까? You 또는 .NET 런타임? –

+1

충분히 공정하게 .... –

답변

0

log() 방법을 수정했습니다.

관련 문제