2013-10-17 239 views
0

我試圖用不同的線程更新UI,並使用下面的過程中做so.But調用期間獲得上述錯誤。請注意,這是不允許的。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

我也會做同樣Baldrick。

他是用lambda表達式,也許你會使用這樣的

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

但是,我不認爲這是問題。

當有在委託處理程序/函數調用的參數的數量,並在調用聲明中定義的對象的數量之間的失配我先前接收到的這個問題。

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

我希望有幫助。

+0

「的在委託處理程序/函數調用的參數的數量,並在調用聲明中定義的對象的數量之間的失配」。 + 1 – Dave

相關問題