IVsDataHostService.InvokeOnUIThread 方法

同步执行在主线程中的指定方法在Visual Studio中运行处理,并指定的参数列表。

命名空间:  Microsoft.VisualStudio.Data.Core
程序集:  Microsoft.VisualStudio.Data.Core(在 Microsoft.VisualStudio.Data.Core.dll 中)

语法

声明
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

参数

  • method
    类型:System.Delegate
    一个方法委托,它采用的参数的数量和类型与 args 参数中所包含的相同。
  • args
    类型:array<System.Object[]
    作为指定方法的参数传递的对象数组。如果此方法没有参数,该参数可以是 nullnull 引用(在 Visual Basic 中为 Nothing)。

返回值

类型:System.Object
Object ,它包含正被调用的委托返回值;如果该委托没有返回值,则为 nullnull 引用(在 Visual Basic 中为 Nothing)。

异常

异常 条件
[any]

所指定的方法引发了异常。

备注

此方法对于完成大部分在后台线程的工作的多线程方案很有用,但定期需要对UI线程将只运行的代码。此代码包括访问全局Visual Studio服务,尤其是那些实现为在本机代码的单线程的COM组件。

当调用此方法时,它将消息到UI线程的windows消息队列,在处理调用指定的方法。此方法是同步的,这意味着调用的线程被阻止,直到用户界面线程完成处理方法。

警告说明警告

调用此方法,当用户界面线程等待调用线程上当前已锁定的对象采用锁在处理将产生一个死锁。在固定的最佳方案将在多个线程中将有助于最大限度地减少此问题匹配项。

示例

下面的代码演示此方法的一用于告知无法从后台线程访问的本机Visual Studio服务。

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

.NET Framework 安全性

请参见

参考

IVsDataHostService 接口

Microsoft.VisualStudio.Data.Core 命名空间