Control.BeginInvoke Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Выполняет делегат асинхронно в потоке, на который был создан базовый дескриптор элемента управления.
Перегрузки
| Имя | Описание |
|---|---|
| BeginInvoke(Delegate, Object[]) |
Выполняет указанный делегат асинхронно с указанными аргументами в потоке, на который был создан базовый дескриптор элемента управления. |
| BeginInvoke(Action) |
Выполняет указанный делегат асинхронно в потоке, на который был создан базовый дескриптор элемента управления. |
| BeginInvoke(Delegate) |
Выполняет указанный делегат асинхронно в потоке, на который был создан базовый дескриптор элемента управления. |
BeginInvoke(Delegate, Object[])
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
Выполняет указанный делегат асинхронно с указанными аргументами в потоке, на который был создан базовый дескриптор элемента управления.
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);
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 представляющий результат 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)
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
Выполняет указанный делегат асинхронно в потоке, на который был создан базовый дескриптор элемента управления.
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 представляющий результат BeginInvoke(Action) операции.
Применяется к
BeginInvoke(Delegate)
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
- Исходный код:
- Control.cs
Выполняет указанный делегат асинхронно в потоке, на который был создан базовый дескриптор элемента управления.
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 представляющий результат 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 до создания дескриптора элемента управления в фоновом потоке может вызвать незаконные вызовы между потоками. Для всех других вызовов методов следует использовать один из методов вызова для маршалирования вызова потока элемента управления. Методы вызова всегда вызывают обратные вызовы в потоке элемента управления.
Замечание
Исключение может возникать, если поток, который должен обрабатывать сообщение, больше не активен.