IInvokeProvider.Invoke Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
Envia um pedido para ativar um controlo e iniciar a sua única ação inequívoca.
public:
void Invoke();
public void Invoke();
abstract member Invoke : unit -> unit
Public Sub Invoke ()
Exceções
Se o controle não estiver habilitado.
Exemplos
O exemplo seguinte implementa o Invoke método no handler de eventos MouseDown de um controlo. Assuma que providerControl é uma variável membro que foi inicializada quando a classe foi construída.
/// <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 });
}
}
Observações
Invoke é uma chamada assíncrona e deve retornar imediatamente sem bloqueio.
Note
Esse comportamento é particularmente crítico para controles que, direta ou indiretamente, iniciam uma caixa de diálogo modal quando invocados. Qualquer cliente de automação da interface do usuário que instigou o evento permanecerá bloqueado até que a caixa de diálogo modal seja fechada.
Invoke eleva o InvokedEvent evento. Se possível, o evento deve ser elevado após o controlo ter concluído a ação associada.
InvokedEvent deve ser levantado antes de atender o Invoke pedido nos seguintes cenários:
Não é possível ou prático esperar até que a ação esteja concluída.
A ação requer interação do usuário.
A ação é demorada e fará com que o cliente que chama bloqueie durante um período significativo de tempo.