모든 데이터를 TCP 연결을 모니터링하고 전체 메시지가 수신 된 경우 이벤트를 실행하는 프로그램이 있습니다. 리스너가 UI 스레드와 다른 스레드에 있습니다. 이벤트가 발생하면 메시지에 UI 변경이 필요하면 현재 변경 사항으로 Form을 호출합니다. 이 호출에 적중이 발생하면 이벤트를 트리거 한 리스너의 함수는 유효하지 않은 오류 인 크로스 스레드 조작을 플래그합니다. 내가 그 오류를 피하려고 할 때 이벤트를 호출 한 스레드가 그 오류를 표시하는 이유를 이해하지 못한다. 예 : 명령의 호출없이크로스 스레드 작업 "폴백"
:
if (cmd == "NEWID")
{
usr = new User(usr.Name, int.Parse(NW_Connector.GetWord(msg, 1)));
this.Text = "Note It - " + usr.Name + "(" + usr.ID + ")"; //Cross-Thread Here
}
크로스 스레드가 this.Text 변화에 있었 네요.
난 호출을 추가 할 때 :
if (cmd == "NEWID")
{
usr = new User(usr.Name, int.Parse(NW_Connector.GetWord(msg, 1)));
this.Invoke(new MethodInvoker(delegate { this.Text = "Note It - " + usr.Name + "(" + usr.ID + ")"; }));
}
크로스 쓰레드가 이벤트 트리거 함수에 신고되어
if (NewMessage != null && NetworkConnectionState != ConnectionState.Closing)
NewMessage(this, cl, data); //Cross-Thread Here
은 newMessage 기능에 등록 된 이벤트이다
을public delegate void RecievedMessage(object sender, Client messageSender, byte[] message);
public event RecievedMessage NewMessage;
올바른 t를 호출 할 때 크로스 스레드가 "이동"된 이유를 이해하지 못합니다. hread. 어떤 도움이라도 환상적입니다!
'NewMessage' 기능은 무엇을합니까? 그것은 어떻게 생겼어? –
NewMessage는에 등록 된 이벤트입니다. 해당 정보가있는 원래 게시물을 수정했습니다. – Skintkingle