Control.BeginInvoke 方法  
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
在创建控件的基础句柄所在线程上异步执行委托。
重载
| BeginInvoke(Delegate, Object[]) | 
						   在创建控件的基础句柄所在线程上,用指定的自变量异步执行指定委托。  | 
        	
| BeginInvoke(Action) | 
						   在创建控件的基础句柄所在线程上异步执行指定委托。  | 
        	
| BeginInvoke(Delegate) | 
						   在创建控件的基础句柄所在线程上异步执行指定委托。  | 
        	
BeginInvoke(Delegate, Object[])
在创建控件的基础句柄所在线程上,用指定的自变量异步执行指定委托。
public:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, cli::array <System::Object ^> ^ args);
	public:
 virtual IAsyncResult ^ BeginInvoke(Delegate ^ method, ... cli::array <System::Object ^> ^ args);
	public IAsyncResult BeginInvoke (Delegate method, object[] args);
	public IAsyncResult BeginInvoke (Delegate method, params object[] args);
	abstract member BeginInvoke : Delegate * obj[] -> IAsyncResult
override this.BeginInvoke : Delegate * obj[] -> IAsyncResult
	Public Function BeginInvoke (method As Delegate, args As Object()) As IAsyncResult
	Public Function BeginInvoke (method As Delegate, ParamArray args As Object()) As IAsyncResult
	参数
- method
 - Delegate
 
一个方法委托,它采用的参数的数量和类型与 args 参数中所包含的相同。
- args
 - Object[]
 
作为给定方法的自变量传递的对象数组。 如果不需要参数,则可以为 null。
返回
一个表示 IAsyncResult 操作的结果的 BeginInvoke(Delegate)。
实现
例外
找不到适当的窗口句柄。
示例
下面的代码示例演示了该方法 BeginInvoke 的使用。
private:
   delegate void MyDelegate(
   Label^ myControl, String^ myArg2 );
   void Button_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      array<Object^>^myArray = gcnew array<Object^>(2);
      myArray[ 0 ] = gcnew Label;
      myArray[ 1 ] = "Enter a Value";
      myTextBox->BeginInvoke( gcnew MyDelegate( this, &MyForm::DelegateMethod ), myArray );
   }
   void DelegateMethod( Label^ myControl, String^ myCaption )
   {
      myControl->Location = Point(16,16);
      myControl->Size = System::Drawing::Size( 80, 25 );
      myControl->Text = myCaption;
      this->Controls->Add( myControl );
   }
   delegate void InvokeDelegate();
public delegate void MyDelegate(Label myControl, string myArg2);
private void Button_Click(object sender, EventArgs e)
{
   object[] myArray = new object[2];
   myArray[0] = new Label();
   myArray[1] = "Enter a Value";
   myTextBox.BeginInvoke(new MyDelegate(DelegateMethod), myArray);
}
public void DelegateMethod(Label myControl, string myCaption)
{
   myControl.Location = new Point(16,16);
   myControl.Size = new Size(80, 25);
   myControl.Text = myCaption;
   this.Controls.Add(myControl);
}
Delegate Sub MyDelegate(myControl As Label, myArg2 As String)
Private Sub Button_Click(sender As Object, e As EventArgs)
   Dim myArray(1) As Object
   
   myArray(0) = New Label()
   myArray(1) = "Enter a Value"
   myTextBox.BeginInvoke(New MyDelegate(AddressOf DelegateMethod), myArray)
End Sub
Public Sub DelegateMethod(myControl As Label, myCaption As String)
   myControl.Location = New Point(16, 16)
   myControl.Size = New Size(80, 25)
   myControl.Text = myCaption
   Me.Controls.Add(myControl)
End Sub
    	注解
委托以异步方式调用,此方法会立即返回。 你可以从任何线程调用此方法,即使是拥有控件句柄的线程。 如果控件的句柄尚不存在,此方法将搜索控件的父链,直到找到具有窗口句柄的控件或窗体。 如果未找到适当的句柄, BeginInvoke 将引发异常。 委托方法中的异常被视为未捕获,并将发送到应用程序的未捕获异常处理程序。
可以调用 EndInvoke 以从委托中检索返回值(如果为 neccesary),但这不是必需的。 EndInvoke 将阻止,直到可以检索返回值。
备注
控件上的大多数方法只能从创建控件的线程调用。 除了 InvokeRequired 属性之外,控件上还有四种方法是线程安全的: Invoke、 BeginInvoke、 EndInvoke以及 CreateGraphics 控件的句柄是否已创建。 在后台线程上创建控件句柄之前调用 CreateGraphics 可能会导致非法跨线程调用。 对于所有其他方法调用,应使用其中一个调用方法封送对控件线程的调用。 调用方法始终在控件的线程上调用其回调。
备注
如果应处理消息的线程不再处于活动状态,则可能会引发异常。
另请参阅
适用于
BeginInvoke(Action)
在创建控件的基础句柄所在线程上异步执行指定委托。
public:
 IAsyncResult ^ BeginInvoke(Action ^ method);
	public IAsyncResult BeginInvoke (Action method);
	member this.BeginInvoke : Action -> IAsyncResult
	Public Function BeginInvoke (method As Action) As IAsyncResult
	参数
- method
 - Action
 
对不带参数的方法的委托。
返回
一个表示 IAsyncResult 操作的结果的 BeginInvoke(Action)。
适用于
BeginInvoke(Delegate)
在创建控件的基础句柄所在线程上异步执行指定委托。
public:
 IAsyncResult ^ BeginInvoke(Delegate ^ method);
	public IAsyncResult BeginInvoke (Delegate method);
	member this.BeginInvoke : Delegate -> IAsyncResult
	Public Function BeginInvoke (method As Delegate) As IAsyncResult
	参数
- method
 - Delegate
 
对不带参数的方法的委托。
返回
一个表示 IAsyncResult 操作的结果的 BeginInvoke(Delegate)。
例外
找不到适当的窗口句柄。
示例
下面的代码示例演示了该方法 BeginInvoke 的使用。
private:
   void Invoke_Click( Object^ /*sender*/, EventArgs^ /*e*/ )
   {
      myTextBox->BeginInvoke( gcnew InvokeDelegate( this, &MyForm::InvokeMethod ) );
   }
   void InvokeMethod()
   {
      myTextBox->Text = "Executed the given delegate";
   }
public delegate void InvokeDelegate();
private void Invoke_Click(object sender, EventArgs e)
{
   myTextBox.BeginInvoke(new InvokeDelegate(InvokeMethod));
}
public void InvokeMethod()
{
   myTextBox.Text = "Executed the given delegate";
}
Delegate Sub InvokeDelegate()
Private Sub Invoke_Click(sender As Object, e As EventArgs)
   myTextBox.BeginInvoke(New InvokeDelegate(AddressOf InvokeMethod))
End Sub
Public Sub InvokeMethod()
   myTextBox.Text = "Executed the given delegate"
End Sub
    	注解
委托以异步方式调用,此方法会立即返回。 你可以从任何线程调用此方法,即使是拥有控件句柄的线程。 如果控件的句柄尚不存在,此方法将搜索控件的父链,直到找到具有窗口句柄的控件或窗体。 如果未找到适当的句柄, BeginInvoke 将引发异常。 委托方法中的异常被视为未捕获,并将发送到应用程序的未捕获异常处理程序。
可以调用 EndInvoke 以从委托中检索返回值(如果为 neccesary),但这不是必需的。 EndInvoke 将阻止,直到可以检索返回值。
备注
控件上的大多数方法只能从创建控件的线程调用。 除了 InvokeRequired 属性之外,控件上还有四种方法是线程安全的: Invoke、 BeginInvoke、 EndInvoke以及 CreateGraphics 控件的句柄是否已创建。 在后台线程上创建控件句柄之前调用 CreateGraphics 可能会导致非法跨线程调用。 对于所有其他方法调用,应使用其中一个调用方法封送对控件线程的调用。 调用方法始终在控件的线程上调用其回调。
备注
如果应处理消息的线程不再处于活动状态,则可能会引发异常。