IInvokeProvider.Invoke Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
Envia uma solicitação para ativar um controle e iniciar sua ação única não ambígua.
public:
void Invoke();
public void Invoke ();
abstract member Invoke : unit -> unit
Public Sub Invoke ()
Exceções
Se o controle não está habilitado.
Exemplos
O exemplo a seguir implementa o Invoke método no manipulador de eventos MouseDown de um controle . Suponha que providerControl
seja uma variável de 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 });
}
}
Comentários
Invoke é uma chamada assíncrona e deve retornar imediatamente sem bloqueio.
Observação
Esse comportamento é particularmente crítico para controles que, direta ou indiretamente, iniciam uma caixa de diálogo modal quando invocado. 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 raises the InvokedEvent . Se possível, o evento deve ser gerado depois que o controle concluir sua ação associada.
InvokedEvent deve ser gerado antes de atender à Invoke solicitação nos seguintes cenários:
Não é possível ou prático aguardar até que a ação seja concluída.
A ação requer interação do usuário.
A ação é demorada e fará com que o cliente de chamada seja bloqueado por um período significativo de tempo.