Udostępnij za pośrednictwem


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.

Uwaga

To zachowanie jest szczególnie krytyczne w przypadku kontrolek, które bezpośrednio lub pośrednio uruchamiają modalne okno dialogowe podczas wywoływanego wywołania. Każdy klient automatyzacja interfejsu użytkownika, który podżegał zdarzenie, pozostanie zablokowany do czasu zamknięcia modalnego okna dialogowego.

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

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

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

  • Akcja wymaga interakcji z użytkownikiem.

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

Dotyczy

Zobacz też