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 すことができますが、これは必要ありません。 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 操作の結果を表す 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 すことができますが、これは必要ありません。 EndInvoke は、戻り値を取得できるようになるまでブロックされます。
注意
コントロールのほとんどのメソッドは、コントロールが作成されたスレッドからのみ呼び出すことができます。 このプロパティにInvokeRequired加えて、スレッド セーフInvokeBeginInvokeなコントロールには、4 つのメソッドがあります。つまり、EndInvokeCreateGraphicsコントロールのハンドルが既に作成されている場合です。 バックグラウンド スレッドでコントロールのハンドルが作成される前に呼び出 CreateGraphics すと、スレッド間の呼び出しが無効になることがあります。 他のすべてのメソッド呼び出しでは、いずれかの invoke メソッドを使用して、コントロールのスレッドへの呼び出しをマーシャリングする必要があります。 invoke メソッドは、常にコントロールのスレッドでコールバックを呼び出します。
注意
メッセージを処理するスレッドがアクティブでなくなった場合、例外がスローされる可能性があります。