IInvokeProvider.Invoke Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Направляет запрос на активацию элемента управления и инициирует его единственное, однозначное действие.
public:
void Invoke();
public void Invoke ();
abstract member Invoke : unit -> unit
Public Sub Invoke ()
Исключения
Если элемент управления не включен.
Примеры
В следующем примере реализуется Invoke метод в обработчике событий MouseDown элемента управления . Предположим, что providerControl
является переменной-членом, которая была инициализирована при создании класса.
/// <summary>
/// Responds to an InvokePattern.Invoke by simulating a MouseDown event.
/// </summary>
/// <remarks>
/// ProviderControl is a button control object that also implements
/// IRawElementProviderSimple.
/// </remarks>
void IInvokeProvider.Invoke()
{
// If the control is not enabled, we're responsible for letting UIAutomation know.
// It catches the exception and then throws it to the client.
if (false == (bool)rawElementProvider.GetPropertyValue(AutomationElementIdentifiers.IsEnabledProperty.Id))
{
throw new ElementNotEnabledException();
}
// Create arguments for the event. The parameters aren't used.
MouseEventArgs mouseArgs = new MouseEventArgs(MouseButtons.Left, 1, 0, 0, 0);
// Invoke the MouseDown handler. We cannot call MyControl_MouseDown directly,
// because it is illegal to update the UI from a different thread.
MouseEventHandler onMouseEvent = ProviderControl.RootButtonControl_MouseDown;
ProviderControl.BeginInvoke(onMouseEvent, new object[] { this, mouseArgs });
}
}
Комментарии
Invoke является асинхронным вызовом и должен возвращаться немедленно без блокировки.
Примечание
Это особенно важно для элементов управления, которые при вызове прямо или косвенно запускают модальное диалоговое окно. Любой клиент автоматизации пользовательского интерфейса, инициировавший это событие, будет оставаться заблокированным до закрытия модального диалогового окна.
Метод Invoke формирует событие InvokedEvent. Если это возможно, событие должно вызываться после того, как элемент управления завершит связанное действие.
InvokedEvent необходимо вызвать перед обслуживанием Invoke запроса в следующих сценариях:
невозможно или нецелесообразно ожидать завершения действия;
действие требует взаимодействия с пользователем;
Это действие занимает много времени и приведет к тому, что вызывающий клиент будет блокироваться на значительное время.