"크로스 스레드 작업이 유효하지 않음 : 생성 된 스레드가 아닌 스레드에서 액세스 된 제어."

JOATMON

RichTextBox컨트롤에 일부 메시지를 기록하려고합니다 . 처음 2 개 또는 3 개를 기록한 후 다음 오류가 발생합니다.

"크로스 스레드 작업이 유효하지 않음 : 생성 된 스레드가 아닌 다른 스레드에서 액세스 된 'txtLog'제어."

이것은 하나의 구독을 하는 매우 간단한 앱입니다 . 스레딩 시도가 없었습니다.

내가 찾은 또 다른 질문에 따라 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\"]")작동했기 때문에 문자열 문제라고 생각하지 않습니다. 스레딩은 정말 나를 쫓아 내고 있습니다.

JOATMON

중복 질문에 따라 log()방법을 수정했습니다 .

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

이제 작동합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관