Język

IInvokeProvider.Invoke Metoda

Definicja

Wysyła żądanie aktywowania kontrolki i inicjuje pojedynczą, jednoznaczną akcję.

public:
 void Invoke();
public void Invoke();
abstract member Invoke : unit -> unit
Public Sub Invoke ()

Wyjątki

Jeśli kontrolka nie jest włączona.

Przykłady

Poniższy przykład implementuje metodę Invoke w procedurze obsługi zdarzeń MouseDown kontrolki. Załóżmy, że providerControl jest to zmienna składowa, która została zainicjowana podczas konstruowania klasy.

/// <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 });
    }
}

Uwagi

Invoke jest wywołaniem asynchronicznym i musi zostać zwrócone natychmiast bez blokowania.

Note

Takie zachowanie jest szczególnie krytyczne w przypadku kontrolek, które bezpośrednio lub pośrednio uruchamiają modalne okno dialogowe po wywołaniu. Każdy klient automatyzacji interfejsu użytkownika, który zainicjował zdarzenie, pozostanie zablokowany do momentu zamknięcia modalnego okna dialogowego.

Invoke InvokedEvent zgłasza zdarzenie. Jeśli to możliwe, zdarzenie powinno zostać zgłoszone po zakończeniu skojarzonej akcji kontrolki.

InvokedEvent przed obsługą Invoke żądania należy zgłosić w następujących scenariuszach:

  • Nie jest możliwe ani praktyczne oczekiwanie na ukończenie akcji.

  • Akcja wymaga interakcji użytkownika.

  • Akcja jest czasochłonna i spowoduje zablokowanie klienta wywołującego przez dłuższy czas.

Dotyczy

Zobacz też