2013-10-17 5 views
0

다른 스레드를 사용하여 UI를 업데이트하려고하는데 아래 프로세스를 사용하여 위와 같은 오류가 발생합니다. 친절하게 조언하는 것은 허용되지 않습니다. 이런 식으로 함수의 상단을 변경system.reflection.targetparametercountexception 매개 변수 개수가 일치하지 않습니다. 매개 변수 개수가 일치하지 않습니다.

delegate void SetLabelCallback(string text,string Qmgr); 
    private void Set_status(string text, string Qmgr) 
    { 
     if (this.Status1A.InvokeRequired) 
     { 
      SetTextCallback d = new SetTextCallback(record_count); 
      this.Invoke(d, new object[] { text,Qmgr }); 
     } 
     else 
     { 
      switch (Qmgr) 
      { 
       case "GCSSPR1A": this.Status1A.Text = text; 
        break; 
       case "GCSSPR1B": this.B1_Status.Text = text; 
        break; 
       case "GCSSPR2A": this.A2_Status.Text = text; 
        break; 
       case "GCSSPR2B": this.B2_Status.Text = text; 
        break; 
       case "GCSSPR3A": this.A3_Status.Text = text; 
        break; 
       case "GCSSPR3B": this.B3_Status.Text = text; 
        break; 
      } 

     } 
+0

'record_count'의 정의는 무엇입니까? –

+0

C# 4를 사용하고 있습니까? 그렇다면이 코드를 훨씬 간단하고 오류가 발생하지 않는 코드로 만들 수 있습니다. – Baldrick

+0

내 코드에 오타가있는 문제가 수정되었습니다 ... – user2772983

답변

0

시도 :

private void Set_status(string text, string Qmgr) 
{ 
    if (this.Status1A.InvokeRequired) 
    { 
     this.Invoke((Action)(() => Set_status(text, Qmgr))); 
    } 
    else 
    { 

등 대리자 선언을 필요가 없습니다 이런 식으로,

1

나는 또한 유사 그것을 할 것 발드릭.

그는 람다 식을 사용하고 어쩌면 당신은 내가 그게 문제라고 생각하지 않습니다,이

private void Set_status(string text, string Qmgr) 
{ 
    if (this.InvokeRequired) 
    { 
    this.Invoke(new ReceivedEventHandler(Set_status), new Object[] {text, Qmgr});     
    } 
    else 
    { 
    } 
} 

같은 것을 사용하지만 것입니다.

델리게이트 처리기/함수 호출의 매개 변수 수와 Invoke 선언에 정의 된 개체 수 사이에 불일치가있는 경우 이전에이 문제가 발생했습니다.

this.Invoke(d, new object[] { text, Qmgr, something_missing }); 

도움이 되었기를 바랍니다.

+0

"델리게이트 처리기/함수 호출의 매개 변수 수와 Invoke 선언에 정의 된 개체 수 사이의 불일치." +1 – Dave