RichTextBox
컨트롤에 일부 메시지를 기록하려고합니다 . 처음 2 개 또는 3 개를 기록한 후 다음 오류가 발생합니다.
"크로스 스레드 작업이 유효하지 않음 : 생성 된 스레드가 아닌 다른 스레드에서 액세스 된 'txtLog'제어."
이것은 하나의 pubnub 구독을 하는 매우 간단한 앱입니다 . 스레딩 시도가 없었습니다.
내가 찾은 또 다른 질문에 따라 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, \"연결됨 \ ", \"현재 상태 \ "]"
그 때 오류가 발생합니다. 해당 값을 반환하는 코드는 다음과 같습니다.
pubnub.Subscribe<string>(
chnl,
DisplayReturnMessage,
DisplayConnectStatusMessage,
DisplayErrorMessage
);
public void DisplayReturnMessage(string result)
{
log(TimeStamp() + " Result: " + result);
}
그리고 도움이된다면 디버거의 ss가 있습니다.
TimeStamp()
지금 당장 "H : mm : ss.ffff"를 반환 한다는 사실을 무시하십시오 . :)
수동으로 할 수 있었고 log("ConnectStatus: [1,\"Connected\",\"presence\"]")
작동했기 때문에 문자열 문제라고 생각하지 않습니다. 스레딩은 정말 나를 쫓아 내고 있습니다.
중복 질문에 따라 log()
방법을 수정했습니다 .
public void log(string txt)
{
logtext.Append(Environment.NewLine + txt);
txtLog.Invoke(new Action(delegate { txtLog.Text = logtext.ToString(); }));
}
이제 작동합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다