IInvokeProvider.Invoke Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Invia una richiesta per l'attivazione di un controllo e l'avvio dell'azione singola e non ambigua corrispondente.
public:
void Invoke();
public void Invoke ();
abstract member Invoke : unit -> unit
Public Sub Invoke ()
Eccezioni
Il controllo non è abilitato.
Esempio
Nell'esempio seguente viene implementato il Invoke metodo nel gestore eventi MouseDown di un controllo . Si supponga che providerControl
sia una variabile membro inizializzata al momento della costruzione della classe.
/// <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 });
}
}
Commenti
Invoke è una chiamata asincrona e deve restituire immediatamente un valore senza bloccarsi.
Nota
Questo comportamento è particolarmente critico per i controlli che direttamente o indirettamente avviano una finestra di dialogo quando vengono chiamati. Qualsiasi client di automazione interfaccia utente che ha generato l'evento rimarrà bloccato fino a quando non viene chiusa la finestra di dialogo modale.
Invoke genera l'evento InvokedEvent. Se possibile, l'evento deve essere generato dopo che il controllo ha completato l'azione associata.
InvokedEvent deve essere generato prima di gestire la Invoke richiesta negli scenari seguenti:
Non è possibile o conveniente attendere il completamento dell'azione.
L'azione richiede l'intervento dell'utente.
L'azione richiede molto tempo e fa sì che il client chiamante blocchi per un periodo di tempo significativo.