Control.BeginInvoke Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
Wykonuje delegat asynchronicznie w wątku, na podstawie którego utworzono bazowy uchwyt kontrolki.
Przeciążenia
BeginInvoke(Delegate, Object[]) |
Wykonuje określony delegat asynchronicznie z określonymi argumentami w wątku, na który utworzono bazowy uchwyt kontrolki. |
BeginInvoke(Action) |
Wykonuje określony delegat asynchronicznie w wątku, w ramach którego utworzono bazowy uchwyt kontrolki. |
BeginInvoke(Delegate) |
Wykonuje określony delegat asynchronicznie w wątku, w ramach którego utworzono bazowy uchwyt kontrolki. |
BeginInvoke(Delegate, Object[])
Wykonuje określony delegat asynchronicznie z określonymi argumentami w wątku, na który utworzono bazowy 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
Element IAsyncResult reprezentujący wynik BeginInvoke(Delegate) operacji.
Implementuje
Wyjątki
Nie można odnaleźć odpowiedniego uchwytu okna.
Przykłady
W poniższym przykładzie kodu pokazano 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 będącego właścicielem uchwytu kontrolki. Jeśli uchwyt kontrolki nie istnieje jeszcze, ta metoda przeszukuje łańcuch nadrzędny kontrolki do momentu znalezienia kontrolki lub formularza, który ma uchwyt okna. Jeśli nie można odnaleźć odpowiedniego dojścia, BeginInvoke zostanie zgłoszony wyjątek. Wyjątki w metodzie delegata są uznawane za niezaznaczone i będą wysyłane do procedury obsługi wyjątków niezatragowanych aplikacji.
Możesz wywołać EndInvoke metodę , aby pobrać wartość zwracaną z delegata, jeśli nie jest to wymagane. EndInvoke wartość będzie blokowana do momentu pobrania wartości zwracanej.
Uwaga
Większość metod w kontrolce może być wywoływana tylko z wątku, w którym utworzono kontrolkę. Oprócz InvokeRequired właściwości istnieją cztery metody w kontrolce, które są bezpieczne wątkiem: Invoke, BeginInvoke, EndInvokei CreateGraphics jeśli uchwyt dla kontrolki został już utworzony. Wywołanie CreateGraphics metody przed utworzeniem dojścia kontrolki w wątku w tle może spowodować nielegalne wywołania międzywątkowa. W przypadku wszystkich innych wywołań metody należy użyć jednej z metod wywołania do marshalingu wywołania do wątku kontrolki. Metody wywoływania 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ślony delegat asynchronicznie w wątku, w ramach którego utworzono bazowy 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 żadnych parametrów.
Zwraca
Element IAsyncResult reprezentujący wynik BeginInvoke(Action) operacji.
Dotyczy
BeginInvoke(Delegate)
Wykonuje określony delegat asynchronicznie w wątku, w ramach którego utworzono bazowy 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 żadnych parametrów.
Zwraca
Element IAsyncResult reprezentujący wynik BeginInvoke(Delegate) operacji.
Wyjątki
Nie można odnaleźć odpowiedniego uchwytu okna.
Przykłady
W poniższym przykładzie kodu pokazano 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 będącego właścicielem uchwytu kontrolki. Jeśli uchwyt kontrolki nie istnieje jeszcze, ta metoda przeszukuje łańcuch nadrzędny kontrolki do momentu znalezienia kontrolki lub formularza, który ma uchwyt okna. Jeśli nie można odnaleźć odpowiedniego dojścia, BeginInvoke zostanie zgłoszony wyjątek. Wyjątki w metodzie delegata są uznawane za niezaznaczone i będą wysyłane do procedury obsługi wyjątków niezatragowanych aplikacji.
Możesz wywołać EndInvoke metodę , aby pobrać wartość zwracaną z delegata, jeśli nie jest to wymagane. EndInvoke wartość będzie blokowana do momentu pobrania wartości zwracanej.
Uwaga
Większość metod w kontrolce może być wywoływana tylko z wątku, w którym utworzono kontrolkę. Oprócz InvokeRequired właściwości istnieją cztery metody w kontrolce, które są bezpieczne wątkiem: Invoke, BeginInvoke, EndInvokei CreateGraphics jeśli uchwyt dla kontrolki został już utworzony. Wywołanie CreateGraphics metody przed utworzeniem dojścia kontrolki w wątku w tle może spowodować nielegalne wywołania międzywątkowa. W przypadku wszystkich innych wywołań metody należy użyć jednej z metod wywołania do marshalingu wywołania do wątku kontrolki. Metody wywoływania 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.