2014-01-19 42 views
0

我有一個方法:如何從另一個線程使用的BeginInvoke的button.PerformClick() - 跨線程調用

private void RecordButton_Click(object sender, EventArgs e) { 

    } 

,並在其他方法,被稱爲被其他線程:

private void raiseAlarm() { 
       RecordButton.PerformClick();//EXCEPTION HERE 
     } 

我得到一個異常,表明PerformClick()在另一個線程中被調用,因此我應該進行一個交叉線程調用。我應該寫什麼,而不是PerformClick()

+1

你使用WPF或WinForms的 –

+0

@ K.B雙方在此應用程序,但這是相當的WinForms部分(此代碼是在的WinForms類)。 –

+0

DO在stackoverflow搜索,有很多相同的問題 – sll

回答

2

這裏你如何通過傳遞此異常

private void raiseAlarm() 
     { 
      if (this.InvokeRequired) 
      { 

       Action action = raiseAlarm; 
       this.Invoke(action); 
      } 
      else 
      { 

       RecordButton.PerformClick(); 
      } 

     } 

,或者您可以使用其中的BeginInvoke異步執行,控制的基礎句柄創建線程上執行指定的委託。

private void raiseAlarm() 
     { 

      this.BeginInvoke(new Action(raiseAlarm)); 



     } 
+0

正在使用BeginInvoke更好嗎? –

+0

BeginInvoke會啓動一個異步事件,但我認爲在你的場景中不會改變更多的東西 –

+0

callin BeginInvoke(...)會怎樣查看?我嘗試過'BeginInvoke(RecordButton.PerformClick)',但它沒有工作 - >錯誤的參數。 –