Control.BeginInvoke Метод

Определение

Выполняет делегат асинхронно в потоке, в котором был создан базовый дескриптор элемента управления.

Перегрузки

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

Объект 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 Помимо свойства, в элементе управления есть четыре метода, которые являются потокобезопасны: Invoke, BeginInvokeEndInvokeиCreateGraphics, если дескриптор элемента управления уже создан. Вызов CreateGraphics до создания дескриптора элемента управления в фоновом потоке может вызвать недопустимые вызовы между потоками. Для всех других вызовов методов следует использовать один из методов вызова для маршалинга вызова потока элемента управления. Методы вызова всегда вызывают обратные вызовы в потоке элемента управления.

Примечание

Исключение может возникать, если поток, который должен обработать сообщение, больше не активен.

См. также раздел

Применяется к

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

Объект 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

Объект 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 Помимо свойства, в элементе управления есть четыре метода, которые являются потокобезопасны: Invoke, BeginInvokeEndInvokeиCreateGraphics, если дескриптор элемента управления уже создан. Вызов CreateGraphics до создания дескриптора элемента управления в фоновом потоке может вызвать недопустимые вызовы между потоками. Для всех других вызовов методов следует использовать один из методов вызова для маршалинга вызова потока элемента управления. Методы вызова всегда вызывают обратные вызовы в потоке элемента управления.

Примечание

Исключение может возникать, если поток, который должен обработать сообщение, больше не активен.

См. также раздел

Применяется к