2017-12-20 2 views
0

나는 클라이언트와 서버라는 두 개의 프로그램이 있습니다.목록 상자를 최신 항목으로 업데이트하십시오. C#

이 클라이언트는 1 분마다 데이터 (temp, payload, clientID)를 서버에 지속적으로 보냅니다. 그러면 서버는 목록 상자에 데이터를 표시합니다.

문제는 클라이언트의 에서 오는 최근 데이터를 표시하기 위해 목록 상자를 가져올 수 없습니다.

나는 지금 내 printMessage 메소드에서 아래를 사용하고 있습니다.

private void printMessage(string x) 
    { 
     //listBox1.Items.Add(DateTime.Now + x); 
     //return; 
     if (x.Trim().Length == 36) 
     { 
      if (this.listBox1.InvokeRequired) 
      { 
       printMessageCallback d = new printMessageCallback(printMessage); 
       this.Invoke(d, new object[] { x }); 
      } 
      else 
      { 
       this.listBox1.Items.Add("Client ID :" + x); 
       this.listBox1.Refresh(); 
      } 
      //sendtoAgent(); 

     } 
     else if (x.Length == 1) 
     { 
      if (this.listBox1.InvokeRequired) 
      { 
       printMessageCallback d = new printMessageCallback(printMessage); 
       this.Invoke(d, new object[] { x }); 
      } 
      else 
      { 
       this.listBox1.Items.Add("Barrier Payload :" + x); 
       this.listBox1.Refresh(); 
      } 
     } 
     else 
     { 
      if (this.listBox1.InvokeRequired) 
      { 
       printMessageCallback d = new printMessageCallback(printMessage); 
       this.Invoke(d, new object[] { x }); 
      } 
      else 
      { 
       this.listBox1.Items.Add("" + x); 
       this.listBox1.Refresh(); 
      } 

     } 

    } 

지금까지 작동하지 않습니다 아래

this.listBox1.Refresh(); 

내 전체에서 PrintMessage 방법이다.

친절히 도움.

감사합니다.

답변

0

가끔 ListBox SelectionMode가 SelectionMode = None 일 때 문제를 일으킬 수 있습니다. 크로스 스레드 작업이 유효하지 않습니다 :

당신은 내가 InvalidOperationException이 데

listBox1.SelectionMode = SelectionMode.MultiExtended; 
listBox1.Refresh(); 
listBox1.SelectionMode = SelectionMode.None; 
+0

을 시도 할 수 있습니다. 스 니펫을 printMessage() 메서드 안에 넣어야합니까? – AHM

관련 문제