Control.BeginInvoke メソッド (Delegate, Object[]) (System.Windows.Forms)

ビューの切り替え:
スクリプトなし
.NET Framework クラス ライブラリ
Control.BeginInvoke メソッド (Delegate, Object[])
この記事は翻訳者によって翻訳されたものです。 このページおよび元の英語コンテンツを同時に表示させるには、[ライトウェイト] に切り替えます。

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

名前空間:  System.Windows.Forms
アセンブリ:  System.Windows.Forms (System.Windows.Forms.dll 内)
構文

Visual Basic
Public Function BeginInvoke ( _
	method As Delegate, _
	ParamArray args As Object() _
) As IAsyncResult
C#
public IAsyncResult BeginInvoke(
	Delegate method,
	params Object[] args
)
Visual C++
public:
virtual IAsyncResult^ BeginInvoke(
	Delegate^ method, 
	... array<Object^>^ args
) sealed
F#
abstract BeginInvoke : 
        method:Delegate * 
        args:Object[] -> IAsyncResult 
override BeginInvoke : 
        method:Delegate * 
        args:Object[] -> IAsyncResult 

パラメーター

method
型: System.Delegate
args パラメーターに指定されている数および型と同じ数および型のパラメーターをとるメソッドへのデリゲート。
args
型: System.Object[]
特定のメソッドに引数として渡すオブジェクトの配列。 引数が必要ない場合は、null を指定できます。

戻り値

型: System.IAsyncResult
BeginInvoke 操作の結果を表す IAsyncResult

実装

ISynchronizeInvoke.BeginInvoke(Delegate, Object[])
例外

例外 条件
InvalidOperationException

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

解説

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

必要に応じて、EndInvoke を呼び出してデリゲートから戻り値を取得できますが、これは必須ではありません。 EndInvoke は戻り値を取得できるまでブロックします。

メモ メモ

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

メモ メモ

メッセージを処理するスレッドが既に非アクティブになっていた場合は、例外がスローされます。


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

Visual Basic

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 'Button_Click

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 'DelegateMethod



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


Visual C++

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();


バージョン情報

.NET Framework

サポート対象: 4、3.5、3.0、2.0、1.1、1.0

.NET Framework Client Profile

サポート対象: 4、3.5 SP1
プラットフォーム

Windows 7, Windows Vista SP1 以降, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008 (Server Core はサポート対象外), Windows Server 2008 R2 (SP1 以降で Server Core をサポート), Windows Server 2003 SP2

.NET Framework では、各プラットフォームのすべてのバージョンはサポートしていません。 サポートされているバージョンについては、「.NET Framework システム要件」を参照してください。
参照

参照

その他の技術情報