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, 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

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加えて、スレッド セーフInvokeBeginInvokeなコントロールには、4 つのメソッドがあります。つまり、EndInvokeCreateGraphicsコントロールのハンドルが既に作成されている場合です。 バックグラウンド スレッドでコントロールのハンドルが作成される前に呼び出 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加えて、スレッド セーフInvokeBeginInvokeなコントロールには、4 つのメソッドがあります。つまり、EndInvokeCreateGraphicsコントロールのハンドルが既に作成されている場合です。 バックグラウンド スレッドでコントロールのハンドルが作成される前に呼び出 CreateGraphics すと、スレッド間の呼び出しが無効になることがあります。 他のすべてのメソッド呼び出しでは、いずれかの invoke メソッドを使用して、コントロールのスレッドへの呼び出しをマーシャリングする必要があります。 invoke メソッドは、常にコントロールのスレッドでコールバックを呼び出します。

注意

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

こちらもご覧ください

適用対象