Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
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.
Cuidado |
|---|
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
- Confiança total para o chamador imediato. O membro não pode ser usado por código parcialmente confiável. Para obter mais informações, consulte Usando bibliotecas de código parcialmente confiáveis.
Cuidado