Control.BeginInvoke メソッド

定義

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

オーバーロード

BeginInvoke(Delegate, Object[])

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

BeginInvoke(Action)

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

BeginInvoke(Delegate)

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

BeginInvoke(Delegate, Object[])

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

C#
public IAsyncResult BeginInvoke (Delegate method, object[] args);
C#
public IAsyncResult BeginInvoke (Delegate method, params object[] args);

パラメーター

method
Delegate

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

args
Object[]

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

戻り値

IAsyncResult

IAsyncResult 操作の結果を表す BeginInvoke(Delegate)

実装

例外

適切なウィンドウ ハンドルが見つかりません。

次のコード例では、このメソッドの使用方法を BeginInvoke 示します。

C#
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);
}

注釈

デリゲートは非同期的に呼び出され、このメソッドはすぐに返されます。 このメソッドは、コントロールのハンドルを所有するスレッドであっても、任意のスレッドから呼び出すことができます。 コントロールのハンドルがまだ存在しない場合、このメソッドは、ウィンドウ ハンドルを持つコントロールまたはフォームが見つかるまで、コントロールの親チェーンを検索します。 適切なハンドルが見つからない場合は、 BeginInvoke 例外がスローされます。 デリゲート メソッド内の例外は、トラップされていないと見なされ、アプリケーションのトラップされていない例外ハンドラーに送信されます。

デリゲートから戻り値を取得する呼び出し (必要な場合) を呼び出 EndInvoke すことができますが、これは必要ありません。 EndInvoke は、戻り値を取得できるようになるまでブロックされます。

注意

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

注意

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

こちらもご覧ください

適用対象

.NET Framework 4.8 およびその他のバージョン
製品 バージョン
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Windows Desktop 3.0, 3.1, 5, 6, 7

BeginInvoke(Action)

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

C#
public IAsyncResult BeginInvoke (Action method);

パラメーター

method
Action

パラメーターをとらないメソッドへのデリゲート。

戻り値

IAsyncResult

IAsyncResult 操作の結果を表す BeginInvoke(Action)

適用対象

Windows Desktop 7 および Windows Desktop 6
製品 バージョン
Windows Desktop 6, 7

BeginInvoke(Delegate)

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

C#
public IAsyncResult BeginInvoke (Delegate method);

パラメーター

method
Delegate

パラメーターをとらないメソッドへのデリゲート。

戻り値

IAsyncResult

IAsyncResult 操作の結果を表す BeginInvoke(Delegate)

例外

適切なウィンドウ ハンドルが見つかりません。

次のコード例では、このメソッドの使用方法を BeginInvoke 示します。

C#
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";
}

注釈

デリゲートは非同期的に呼び出され、このメソッドはすぐに返されます。 このメソッドは、コントロールのハンドルを所有するスレッドであっても、任意のスレッドから呼び出すことができます。 コントロールのハンドルがまだ存在しない場合、このメソッドは、ウィンドウ ハンドルを持つコントロールまたはフォームが見つかるまで、コントロールの親チェーンを検索します。 適切なハンドルが見つからない場合は、 BeginInvoke 例外がスローされます。 デリゲート メソッド内の例外は、トラップされていないと見なされ、アプリケーションのトラップされていない例外ハンドラーに送信されます。

デリゲートから戻り値を取得する呼び出し (必要な場合) を呼び出 EndInvoke すことができますが、これは必要ありません。 EndInvoke は、戻り値を取得できるようになるまでブロックされます。

注意

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

注意

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

こちらもご覧ください

適用対象

.NET Framework 4.8 およびその他のバージョン
製品 バージョン
.NET Framework 1.1, 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
Windows Desktop 3.0, 3.1, 5, 6, 7