Compartir a través de


IVsDataHostService.InvokeOnUIThread (Método)

Ejecuta sincrónicamente un método especificado en el subproceso principal 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 InvokeOnUIThread ( _
    method As Delegate, _
    ParamArray args As Object() _
) As Object
Object InvokeOnUIThread(
    Delegate method,
    params Object[] args
)
Object^ InvokeOnUIThread(
    Delegate^ method, 
    ... array<Object^>^ args
)
abstract InvokeOnUIThread : 
        method:Delegate * 
        args:Object[] -> Object
function InvokeOnUIThread(
    method : Delegate, 
    ... args : Object[]
) : Object

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: Object
Object que contiene el valor devuelto por el delegado al que se ha invocado, o nullreferencia null (Nothing en Visual Basic) si el delegado no devuelve ningún valor.

Excepciones

Excepción Condición
[any]

El método especificado produjo una excepción.

Comentarios

Este método es útil para los escenarios multiproceso que hacen a la mayoría de trabajo en un subproceso de fondo pero necesita ejecutar periódicamente el código que se ejecute solo en el subproceso de la interfaz de usuario. Este código incluye servicios globales de acceso de Visual Studio, sobre todo los implementados como componentes COM con un único subproceso en código nativo.

Cuando se llama a este método, agrega un mensaje a la cola de mensajes de las ventanas del subproceso de la interfaz de usuario, que en el procesamiento llama al método especificado. Este método es sincrónico, lo que significa que el subproceso de la llamada se bloquea hasta que el subproceso de la interfaz de usuario haya terminado de procesar el método.

Advertencia

Llamar a este método cuando el subproceso de la interfaz de usuario está esperando un bloqueo en un objeto que el subproceso de llamada ha bloqueado actualmente provocará un interbloqueo en el proceso.Los procedimientos recomendados siguientes de bloquear a través de varios subprocesos ayudarán a minimizar la aparición de este problema.

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 DdexHostSvcExample7
{
    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)