다음을 통해 공유


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
    형식: Delegate

    args 매개 변수에 있는 매개 변수의 수 및 형식과 동일한 매개 변수를 갖는 메서드의 대리자입니다.

  • args
    형식: array<Object[]

    지정된 메서드에 인수로 전달하는 개체의 배열입니다. 메서드가 인수를 사용하지 않으면 이 매개 변수는 nullNull 참조(Visual Basic의 경우 Nothing)이 될 수 있습니다.

반환 값

형식: Object
호출되는 대리자의 반환 값이 들어 있는 Object이거나, 대리자에 반환 값이 없으면 nullNull 참조(Visual Basic의 경우 Nothing)입니다.

예외

예외 조건
[any]

지정 된 메서드는 예외를 throw 했습니다.

설명

이 메서드만 UI 스레드에서 실행 되는 코드를 실행 해야 정기적으로 하지만 대부분의 작업을 백그라운드 스레드에서 수행 하는 다중 스레드 시나리오에 유용 합니다. 특히 단일 스레드 COM 구성 요소를 네이티브 코드에 구현 글로벌 Visual Studio 서비스에 액세스 이러한 코드가 포함 됩니다.

이 메서드를 호출 하면 처리에 지정 된 메서드를 호출 하는 UI 스레드가 windows 메시지 큐에 메시지를 추가 합니다. 이 메서드는 동기 처리 메서드는 UI 스레드가 완료 될 때까지 호출한 스레드가 차단 된 의미입니다.

경고

UI 스레드는 잠금에 대 한 호출 스레드에 잠겨 있는 개체에서 대기 중인 경우이 메서드를 호출 프로세스에 교착 상태가 됩니다.여러 스레드에서 잠금에 대 한 최상의 방법을 따르면이 문제의 발생을 최소화 하는 데 도움이 됩니다.

예제

다음 코드 호출할 네이티브 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 네임스페이스