Método IVsDataHostService.InvokeOnUIThread

Executa sincronamente um método especificado em execução no segmento principal do processo do Visual Studio, com a lista de argumentos especificada.

Namespace:  Microsoft.VisualStudio.Data.Core
Assembly:  Microsoft.VisualStudio.Data.Core (em Microsoft.VisualStudio.Data.Core.dll)

Sintaxe

'Declaração
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: System.Delegate
    Um delegado a um método que tenham mesmo número de parâmetros e tipo que estão contidos no parâmetro de args .
  • args
    Tipo: array<System.Object[]
    Uma matriz de objetos para passar como argumentos para o método especificado.Este parâmetro pode ser nulluma referência nula (Nothing no Visual Basic) se o método não leva nenhum argumento.

Valor de retorno

Tipo: System.Object
Object que contém o valor de retorno do delegado que está sendo invocado, ou nulluma referência nula (Nothing no Visual Basic) se o delegado não tem valor de retorno.

Exceções

Exceção Condição
[any]

O método especificado apresentou uma exceção.

Comentários

Este método é útil para os cenários de vários segmentos que tornam a maioria de trabalho em uma thread em segundo plano mas precisa periodicamente de executar o código que será executado somente no encadeamento de interface do usuário.Esse código inclui acessar serviços globais do Visual Studio, especialmente aqueles implementados como componentes COM de único thread em código nativo.

Quando esse método é chamado, adiciona uma mensagem à fila de mensagens do windows no encadeamento de interface do usuário, que no processamento chama o método especificado.Este método é síncrona, o que significa que o segmento de chamada está bloqueado até que o encadeamento de interface do usuário terminar o processamento do método.

Observação de cuidadoCuidado

Chamar este método quando o encadeamento de interface do usuário está aguardando um bloqueio em um objeto que o segmento de chamada atualmente bloqueie causará um deadlock no processo.As práticas recomendadas de seguintes para bloquear por vários segmentos ajudarão a minimizar a ocorrência de esse problema.

Exemplos

O código a seguir demonstra o uso de esse método chamar um serviço nativo do Visual Studio que não pode ser acessado de um segmento de plano de fundo.

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
    }
}

Segurança do .NET Framework

Consulte também

Referência

IVsDataHostService Interface

Namespace Microsoft.VisualStudio.Data.Core