Compartir a través de


IVsDataHostService.BeginInvokeOnUIThread (Método)

Ejecuta de forma asincrónica un método especificado en la ejecución del subproceso (de la interfaz de usuario) en el proceso de Visual Studio, con la lista especificada de argumentos.

Espacio de nombres:  Microsoft.VisualStudio.Data.Core
Ensamblado:  Microsoft.VisualStudio.Data.Core (en Microsoft.VisualStudio.Data.Core.dll)

Sintaxis

'Declaración
Function BeginInvokeOnUIThread ( _
    method As Delegate, _
    ParamArray args As Object() _
) As IAsyncResult
IAsyncResult BeginInvokeOnUIThread(
    Delegate method,
    params Object[] args
)
IAsyncResult^ BeginInvokeOnUIThread(
    Delegate^ method, 
    ... array<Object^>^ args
)
abstract BeginInvokeOnUIThread : 
        method:Delegate * 
        args:Object[] -> IAsyncResult
function BeginInvokeOnUIThread(
    method : Delegate, 
    ... args : Object[]
) : IAsyncResult

Parámetros

  • method
    Tipo: Delegate

    Delegado de un método que obtiene los parámetros del mismo número y tipo que los incluidos en el parámetro args.

  • args
    Tipo: array<Object[]

    Matriz de objetos cuyos valores se pasan como argumentos al método especificado. Este parámetro puede ser nullreferencia null (Nothing en Visual Basic) si el método no toma ningún argumento.

Valor devuelto

Tipo: IAsyncResult
Una instancia de IAsyncResult que representa el resultado de esta operación.

Comentarios

Este método es útil para los escenarios multiproceso que trabajan en un subproceso de fondo y necesitan periódicamente notificar el subproceso de la interfaz de usuario de actualizaciones a la operación. Tales escenarios incluyen provocar los eventos controlados por componentes COM con un único subproceso en código nativo.

Cuando se llama a este método, envía un mensaje a la cola de mensajes de Windows del subproceso de la interfaz de usuario, que en el procesamiento llama al método especificado. Este método es asincrónico, lo que significa que el subproceso de la llamada es especificado inmediatamente una vez que se ha enviado el mensaje. La instancia devuelta de IAsyncResult se puede utilizar por el subproceso en segundo plano para determinar cuando el procesamiento de este mensaje en el subproceso de la interfaz de usuario ha finalizado.

Ejemplos

El código siguiente muestra el uso de este método para llamar a un servicio nativo de Visual Studio que no se puede lograr un subproceso de fondo.

using System;
using System.Threading;
using Microsoft.VisualStudio.Data.Core;
using Microsoft.VisualStudio.Shell.Interop;

public class DdexHostSvcExample3
{
    public static void UpdateUI(IVsDataHostService hostService)
    {
        if (hostService.UIThread == Thread.CurrentThread)
        {
            // Called on UI thread, directly call method
            ActuallyUpdateUI(hostService);
        }
        else
        {
            // Called from background thread, invoke on UI thread
            hostService.InvokeOnUIThread(
                new UpdateUIDelegate(ActuallyUpdateUI),
                hostService);
        }
    }

    private delegate void UpdateUIDelegate(IVsDataHostService hostService);

    private static void ActuallyUpdateUI(IVsDataHostService hostService)
    {
        IVsUIShell uiShell = hostService.GetService<IVsUIShell>();
        uiShell.UpdateCommandUI(0); // fImmediateUpdate == false
    }
}

Seguridad de .NET Framework

Vea también

Referencia

IVsDataHostService Interfaz

Microsoft.VisualStudio.Data.Core (Espacio de nombres)