2014-01-19 31 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)',但它没有工作 - >错误的参数。 –