Control.BeginInvoke メソッド

定義

コントロールの基になるハンドルが作成されたスレッド上で、非同期的にデリゲートを実行します。

オーバーロード

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, params object[] args);
public IAsyncResult BeginInvoke (Delegate method, object[] args);
abstract member BeginInvoke : Delegate * obj[] -> IAsyncResult
override this.BeginInvoke : Delegate * obj[] -> IAsyncResult
Public Function BeginInvoke (method As Delegate, ParamArray args As Object()) As IAsyncResult
Public Function BeginInvoke (method As Delegate, args As Object()) As IAsyncResult

パラメーター

method
Delegate

args パラメーターに指定されている数および型と同じ数および型のパラメーターをとるメソッドへのデリゲート。

args
Object[]

特定のメソッドに引数として渡すオブジェクトの配列。 引数が必要ない場合は、null を指定できます。

戻り値

IAsyncResult

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を呼び出して、必要の場合、デリゲートから戻り値を取得できますが、これは必須ではありません。 EndInvoke は、戻り値を取得できるようになるまでブロックします。

注意

コントロールのほとんどのメソッドは、コントロールが作成されたスレッドからのみ呼び出すことができます。 プロパティに加えて、 InvokeRequired スレッドセーフであるコントロールには Invoke 、、、 BeginInvoke EndInvoke 、および CreateGraphics コントロールのハンドルが既に作成されている場合の4つのメソッドがあります。 CreateGraphicsバックグラウンドスレッドでコントロールのハンドルが作成される前にを呼び出すと、無効なクロススレッド呼び出しが発生する可能性があります。 その他のすべてのメソッド呼び出しでは、いずれかの invoke メソッドを使用して、コントロールのスレッドへの呼び出しをマーシャリングする必要があります。 Invoke メソッドは、常にコントロールのスレッドでコールバックを呼び出します。

注意

メッセージを処理する必要があるスレッドがアクティブでなくなった場合は、例外がスローされる可能性があります。

こちらもご覧ください

適用対象

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

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

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を呼び出して、必要の場合、デリゲートから戻り値を取得できますが、これは必須ではありません。 EndInvoke は、戻り値を取得できるようになるまでブロックします。

注意

コントロールのほとんどのメソッドは、コントロールが作成されたスレッドからのみ呼び出すことができます。 プロパティに加えて、 InvokeRequired スレッドセーフであるコントロールには Invoke 、、、 BeginInvoke EndInvoke 、および CreateGraphics コントロールのハンドルが既に作成されている場合の4つのメソッドがあります。 CreateGraphicsバックグラウンドスレッドでコントロールのハンドルが作成される前にを呼び出すと、無効なクロススレッド呼び出しが発生する可能性があります。 その他のすべてのメソッド呼び出しでは、いずれかの invoke メソッドを使用して、コントロールのスレッドへの呼び出しをマーシャリングする必要があります。 Invoke メソッドは、常にコントロールのスレッドでコールバックを呼び出します。

注意

メッセージを処理する必要があるスレッドがアクティブでなくなった場合は、例外がスローされる可能性があります。

こちらもご覧ください

適用対象