Control.BeginInvoke Metoda

Definicja

Wykonuje delegat asynchronicznie w wątku utworzonym przez podstawowy uchwyt kontrolki.

Przeciążenia

BeginInvoke(Delegate, Object[])

Wykonuje określonego delegata asynchronicznie z określonymi argumentami w wątku utworzonym przez podstawowy uchwyt kontrolki.

BeginInvoke(Action)

Wykonuje określonego delegata asynchronicznie w wątku utworzonym przez podstawowy uchwyt kontrolki.

BeginInvoke(Delegate)

Wykonuje określonego delegata asynchronicznie w wątku utworzonym przez podstawowy uchwyt kontrolki.

BeginInvoke(Delegate, Object[])

Wykonuje określonego delegata asynchronicznie z określonymi argumentami w wątku utworzonym przez podstawowy uchwyt kontrolki.

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

Parametry

method
Delegate

Delegat do metody, która przyjmuje parametry tej samej liczby i typu, które znajdują się w parametrze args .

args
Object[]

Tablica obiektów, które mają być przekazywane jako argumenty do danej metody. Może to być null , jeśli nie są potrzebne żadne argumenty.

Zwraca

IAsyncResult

Element IAsyncResult reprezentujący wynik BeginInvoke(Delegate) operacji.

Implementuje

Wyjątki

Nie można odnaleźć odpowiedniego uchwytu okna.

Przykłady

Poniższy przykład kodu przedstawia użycie BeginInvoke metody .

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, a ta metoda zwraca natychmiast. Tę metodę można wywołać z dowolnego wątku, nawet wątku, który jest właścicielem uchwytu kontrolki. Jeśli uchwyt kontrolki nie istnieje jeszcze, ta metoda wyszukuje łańcuch nadrzędny kontrolki, dopóki nie znajdzie kontrolki lub formularza, który ma uchwyt okna. Jeśli nie można odnaleźć odpowiedniego uchwytu, BeginInvoke zgłosi wyjątek. Wyjątki w metodzie delegata są uznawane za niezatwierdzone i będą wysyłane do nieskorygowanej procedury obsługi wyjątków aplikacji.

Możesz wywołać metodę EndInvoke , aby pobrać wartość zwracaną z delegata, jeśli nie jest to wymagane. EndInvoke spowoduje zablokowanie do momentu pobrania wartości zwracanej.

Uwaga

Większość metod kontrolki może być wywoływana tylko z wątku, w którym utworzono kontrolkę. Oprócz InvokeRequired właściwości istnieją cztery metody kontrolki, które są bezpieczne wątkiem: Invoke, BeginInvoke, EndInvokei CreateGraphics jeśli uchwyt dla kontrolki został już utworzony. Wywołanie przed CreateGraphics utworzeniem uchwytu kontrolki w wątku w tle może spowodować nielegalne wywołania między wątkami. W przypadku wszystkich innych wywołań metody należy użyć jednej z metod wywołania, aby przeprowadzić wywołanie do wątku kontrolki. Metody wywołania zawsze wywołują wywołania zwrotne w wątku kontrolki.

Uwaga

Wyjątek może zostać zgłoszony, jeśli wątek, który powinien przetworzyć komunikat, nie jest już aktywny.

Zobacz też

Dotyczy

BeginInvoke(Action)

Wykonuje określonego delegata asynchronicznie w wątku utworzonym przez podstawowy uchwyt kontrolki.

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

Parametry

method
Action

Delegat do metody, która nie przyjmuje parametrów.

Zwraca

IAsyncResult

Element IAsyncResult reprezentujący wynik BeginInvoke(Action) operacji.

Dotyczy

BeginInvoke(Delegate)

Wykonuje określonego delegata asynchronicznie w wątku utworzonym przez podstawowy uchwyt kontrolki.

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 do metody, która nie przyjmuje parametrów.

Zwraca

IAsyncResult

Element IAsyncResult reprezentujący wynik BeginInvoke(Delegate) operacji.

Wyjątki

Nie można odnaleźć odpowiedniego uchwytu okna.

Przykłady

Poniższy przykład kodu przedstawia użycie BeginInvoke metody .

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, a ta metoda zwraca natychmiast. Tę metodę można wywołać z dowolnego wątku, nawet wątku, który jest właścicielem uchwytu kontrolki. Jeśli uchwyt kontrolki nie istnieje jeszcze, ta metoda wyszukuje łańcuch nadrzędny kontrolki, dopóki nie znajdzie kontrolki lub formularza, który ma uchwyt okna. Jeśli nie można odnaleźć odpowiedniego uchwytu, BeginInvoke zgłosi wyjątek. Wyjątki w metodzie delegata są uznawane za niezatwierdzone i będą wysyłane do nieskorygowanej procedury obsługi wyjątków aplikacji.

Możesz wywołać metodę EndInvoke , aby pobrać wartość zwracaną z delegata, jeśli nie jest to wymagane. EndInvoke spowoduje zablokowanie do momentu pobrania wartości zwracanej.

Uwaga

Większość metod kontrolki może być wywoływana tylko z wątku, w którym utworzono kontrolkę. Oprócz InvokeRequired właściwości istnieją cztery metody kontrolki, które są bezpieczne wątkiem: Invoke, BeginInvoke, EndInvokei CreateGraphics jeśli uchwyt dla kontrolki został już utworzony. Wywołanie przed CreateGraphics utworzeniem uchwytu kontrolki w wątku w tle może spowodować nielegalne wywołania między wątkami. W przypadku wszystkich innych wywołań metody należy użyć jednej z metod wywołania, aby przeprowadzić wywołanie do wątku kontrolki. Metody wywołania zawsze wywołują wywołania zwrotne w wątku kontrolki.

Uwaga

Wyjątek może zostać zgłoszony, jeśli wątek, który powinien przetworzyć komunikat, nie jest już aktywny.

Zobacz też

Dotyczy