Partager via


IVsDataHostService.BeginInvokeOnUIThread, méthode

Exécute de façon asynchrone une méthode spécifiée sur l'exécution principal du thread (interface utilisateur) dans le processus de Visual Studio, avec la liste spécifiée d'arguments.

Espace de noms :  Microsoft.VisualStudio.Data.Core
Assembly :  Microsoft.VisualStudio.Data.Core (dans Microsoft.VisualStudio.Data.Core.dll)

Syntaxe

'Déclaration
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

Paramètres

  • method
    Type : Delegate

    Délégué vers une méthode qui accepte des paramètres du même nombre et du même type que ceux qui sont contenus dans le paramètre args.

  • args
    Type : array<Object[]

    Tableau d'objets à passer comme arguments à la méthode spécifiée. Ce paramètre peut être nullune référence null (Nothing en Visual Basic) si la méthode n'accepte aucun argument.

Valeur de retour

Type : IAsyncResult
Une instance d' IAsyncResult qui représente le résultat de cette opération.

Notes

Cette méthode est utile pour les scénarios multithreads qui travaillent sur un thread d'arrière-plan et régulièrement doivent informer le thread d'interface utilisateur des mises à jour de l'exécution. De tels cas comprennent déclencher des événements qui sont gérés par des composants COM monothread en code natif.

Lorsque cette méthode est appelée, elle publie un message à la file d'attente de messages des fenêtres du thread d'interface utilisateur, qui fait appel à traiter la méthode spécifiée. Cette méthode est asynchrone, ce qui signifie que le thread appelant est retourne immédiatement une fois que le message a été publié. L'instance retournée d' IAsyncResult peut être utilisée par le thread d'arrière-plan pour déterminer quand le traitement de ce message sur le thread d'interface utilisateur est terminé.

Exemples

Le code suivant illustre l'utilisation de cette méthode à appeler un service natif Visual Studio qui n'est pas accessible à partir d'un thread d'arrière-plan.

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

Sécurité .NET Framework

Voir aussi

Référence

IVsDataHostService Interface

Microsoft.VisualStudio.Data.Core, espace de noms