2013-04-11 2 views
0

1) 내 클라이언트 프로그램에서 연결 시작 버튼을 클릭합니다. 시작 버튼의 배경색을 빨간색으로 설정했습니다.버튼 Backgroundworker에서 BackColor가 변경되지 않습니다. 완료 방법

2) TCP 연결이 완료되면 등록 메시지가 전송되고 단추 뒷면 색이 노란색으로 바뀝니다.

3) 서버가 클라이언트에게 등록 ACK를 보내면 배경 작업자 (BGW)에서 처리됩니다. BGW는 부울 변수 SetConnectButton을 설정하여 등록이 성공적임을 확인한 다음 완료합니다.

4) RunWorkerCompleted 함수가 실행되었습니다. 디버그 창에 "Lime"이 표시되지만 단추 색은 변경되지 않습니다. 다음은 RunWorkerCompleted 코드입니다.

static private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
     { 
     if (SetConnectButton) 
      { 
      Debug.WriteLine("Lime"); 
      SetConnectButton = false; 
      UIMain.btnServerConnect.BackColor = System.Drawing.Color.Lime; 
      } 
     }//close WorkerCompleted 

내가 이해하는 것처럼 RunWorkerCompleted는 UI 스레드에서 실행되므로 이것이 정상적으로 작동해야합니다. Invoke를 사용하면 아무런 효과가 없지만 올바르게 수행하지는 못했습니다.

실마리가 있습니까?

+0

해당 이벤트 처리기에서 중단 점 설정을 시도 했습니까? 'SetConnectButton'이 true입니까? –

+0

예, "Lime"이라는 단어가 디버그 출력에 표시되므로 SetConnectButton이 true입니다. BTW, UIMain은 "button"이있는 주 양식의 생성자에서 "this"로 설정됩니다. –

+0

runworkercompleted가 UI 스레드에서 실행되는 것은 어디에서 msdn으로 작성됩니까? – Ikaso

답변

0

UI를 쓰는 함수를 호출 할 때 Context.Post 메서드를 사용하여 문제를 해결했습니다.