Control.BeginInvoke Metoda

Definicja

Wykonuje delegata asynchronicznie w wątku, w którym został utworzony uchwyt bazowy formantu.Executes a delegate asynchronously on the thread that the control's underlying handle was created on.

Przeciążenia

BeginInvoke(Delegate)

Wykonuje określony delegat asynchronicznie w wątku, w którym utworzono uchwyt podstawowy formantu.Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

BeginInvoke(Delegate, Object[])

Wykonuje określony delegat asynchronicznie z określonymi argumentami w wątku, w którym utworzono uchwyt podstawowy formantu.Executes the specified delegate asynchronously with the specified arguments, on the thread that the control's underlying handle was created on.

BeginInvoke(Delegate)

Wykonuje określony delegat asynchronicznie w wątku, w którym utworzono uchwyt podstawowy formantu.Executes the specified delegate asynchronously on the thread that the control's underlying handle was created on.

public:
 IAsyncResult ^ BeginInvoke(Delegate ^ method);
public IAsyncResult BeginInvoke (Delegate method);
member this.BeginInvoke : Delegate -> IAsyncResult
Public Function BeginInvoke (method As Delegate) As IAsyncResult

Parametry

method
Delegate

Delegat metody, która nie przyjmuje żadnych parametrów.A delegate to a method that takes no parameters.

Zwraca

IAsyncResult, który reprezentuje wynik operacji BeginInvoke(Delegate).An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

Wyjątki

Nie można znaleźć odpowiedniego uchwytu okna.No appropriate window handle can be found.

Przykłady

Poniższy przykład kodu demonstruje użycie metody BeginInvoke.The following code example demonstrates a use of the BeginInvoke method.

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

Uwagi

Delegat jest wywoływany asynchronicznie i ta metoda wraca natychmiast.The delegate is called asynchronously, and this method returns immediately. Można wywołać tę metodę z dowolnego wątku, nawet wątek, który jest właścicielem uchwytu formantu.You can call this method from any thread, even the thread that owns the control's handle. Jeśli dojście kontrolki jeszcze nie istnieje, ta metoda przeszukuje łańcuch nadrzędny kontrolki do momentu znalezienia kontrolki lub formularza, który ma uchwyt okna.If the control's handle does not exist yet, this method searches up the control's parent chain until it finds a control or form that does have a window handle. Jeśli nie można znaleźć odpowiedniego dojścia, BeginInvoke zgłosi wyjątek.If no appropriate handle can be found, BeginInvoke will throw an exception. Wyjątki w ramach metody delegata są uznawane za niezalewkowane i wysyłane do programu obsługi wyjątków niepułapki aplikacji.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

Możesz wywołać EndInvoke, aby pobrać wartość zwracaną z delegata, jeśli niezbędnych, ale nie jest to wymagane.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvoke będzie blokować do momentu pobrania wartości zwracanej.EndInvoke will block until the return value can be retrieved.

Uwaga

Większość metod na formancie można wywołać tylko z wątku, w którym formant został utworzony.Most methods on a control can only be called from the thread where the control was created. Oprócz właściwości InvokeRequired istnieją cztery metody kontrolki, które są bezpieczne dla wątków: Invoke, BeginInvoke, EndInvokei CreateGraphics, jeśli uchwyt dla kontrolki został już utworzony.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. Wywoływanie CreateGraphics przed utworzeniem uchwytu kontrolki w wątku w tle może spowodować niedozwolone wywołania międzywątkowe.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Dla wszystkich innych wywołań metody należy użyć jednej z metod Invoke do skierowania wywołania do wątku formantu.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Metody Invoke zawsze wywołują swoje wywołania zwrotne w wątku formantu.The invoke methods always invoke their callbacks on the control's thread.

Uwaga

Wyjątek może być zgłaszany, jeśli wątek, który powinien przetworzyć komunikat, nie jest już aktywny.An exception might be thrown if the thread that should process the message is no longer active.

Zobacz też

BeginInvoke(Delegate, Object[])

Wykonuje określony delegat asynchronicznie z określonymi argumentami w wątku, w którym utworzono uchwyt podstawowy formantu.Executes the specified delegate asynchronously with the specified arguments, on the thread that the control's underlying handle was created on.

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

Parametry

method
Delegate

Delegat do metody, która pobiera parametry o tej samej liczbie i typie, które znajdują się w parametrze args.A delegate to a method that takes parameters of the same number and type that are contained in the args parameter.

args
Object[]

Tablica obiektów do przekazania jako argumenty do danej metody.An array of objects to pass as arguments to the given method. Można to null, jeśli nie są żądane żadne argumenty.This can be null if no arguments are needed.

Zwraca

IAsyncResult, który reprezentuje wynik operacji BeginInvoke(Delegate).An IAsyncResult that represents the result of the BeginInvoke(Delegate) operation.

Implementuje

Wyjątki

Nie można znaleźć odpowiedniego uchwytu okna.No appropriate window handle can be found.

Przykłady

Poniższy przykład kodu demonstruje użycie metody BeginInvoke.The following code example demonstrates a use of the BeginInvoke method.

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

Uwagi

Delegat jest wywoływany asynchronicznie i ta metoda wraca natychmiast.The delegate is called asynchronously, and this method returns immediately. Można wywołać tę metodę z dowolnego wątku, nawet wątek, który jest właścicielem uchwytu formantu.You can call this method from any thread, even the thread that owns the control's handle. Jeśli dojście kontrolki jeszcze nie istnieje, ta metoda przeszukuje łańcuch nadrzędny kontrolki do momentu znalezienia kontrolki lub formularza, który ma uchwyt okna.If the control's handle does not exist yet, this method searches up the control's parent chain until it finds a control or form that does have a window handle. Jeśli nie można znaleźć odpowiedniego dojścia, BeginInvoke zgłosi wyjątek.If no appropriate handle can be found, BeginInvoke will throw an exception. Wyjątki w ramach metody delegata są uznawane za niezalewkowane i wysyłane do programu obsługi wyjątków niepułapki aplikacji.Exceptions within the delegate method are considered untrapped and will be sent to the application's untrapped exception handler.

Możesz wywołać EndInvoke, aby pobrać wartość zwracaną z delegata, jeśli niezbędnych, ale nie jest to wymagane.You can call EndInvoke to retrieve the return value from the delegate, if neccesary, but this is not required. EndInvoke będzie blokować do momentu pobrania wartości zwracanej.EndInvoke will block until the return value can be retrieved.

Uwaga

Większość metod na formancie można wywołać tylko z wątku, w którym formant został utworzony.Most methods on a control can only be called from the thread where the control was created. Oprócz właściwości InvokeRequired istnieją cztery metody kontrolki, które są bezpieczne dla wątków: Invoke, BeginInvoke, EndInvokei CreateGraphics, jeśli uchwyt dla kontrolki został już utworzony.In addition to the InvokeRequired property, there are four methods on a control that are thread safe: Invoke, BeginInvoke, EndInvoke, and CreateGraphics if the handle for the control has already been created. Wywoływanie CreateGraphics przed utworzeniem uchwytu kontrolki w wątku w tle może spowodować niedozwolone wywołania międzywątkowe.Calling CreateGraphics before the control's handle has been created on a background thread can cause illegal cross thread calls. Dla wszystkich innych wywołań metody należy użyć jednej z metod Invoke do skierowania wywołania do wątku formantu.For all other method calls, you should use one of the invoke methods to marshal the call to the control's thread. Metody Invoke zawsze wywołują swoje wywołania zwrotne w wątku formantu.The invoke methods always invoke their callbacks on the control's thread.

Uwaga

Wyjątek może być zgłaszany, jeśli wątek, który powinien przetworzyć komunikat, nie jest już aktywny.An exception might be thrown if the thread that should process the message is no longer active.

Zobacz też

Dotyczy