이 문서는 기계 번역을 이용하여 번역되었습니다. 문서를 영문으로 보려면 영문 확인란을 선택하세요. 마우스 포인터를 텍스트 위로 이동시켜 팝업 창에서 영문 텍스트를 표시할 수도 있습니다.
번역
영문
Visual Studio 2017을 사용하는 것이 좋습니다.

IVsDataHostService.BeginInvokeOnUIThread 메서드

비동기적으로 지정 된 메서드를 실행 하 주 (UI) 스레드에서 지정 된 인수 목록에는 Visual Studio 프로세스를 실행 합니다.

네임스페이스:  Microsoft.VisualStudio.Data.Core
어셈블리:  Microsoft.VisualStudio.Data.Core(Microsoft.VisualStudio.Data.Core.dll)

IAsyncResult BeginInvokeOnUIThread(
	Delegate method,
	params Object[] args
)

매개 변수

method
형식: Delegate

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

args
형식: Object[]

지정된 메서드에 인수로 전달하는 개체의 배열입니다. 메서드가 인수를 사용하지 않으면 이 매개 변수는 null이 될 수 있습니다.

반환 값

형식: IAsyncResult
IAsyncResult 이 작업의 결과 나타내는 인스턴스입니다.

이 메서드는 작업을 백그라운드 스레드에서 수행 하 고 정기적으로 업데이트 하는 작업의 UI 스레드를 알려 주어 야 하는 다중 스레드 시나리오에 유용 합니다. 이러한 시나리오는 단일 스레드 COM 구성 요소를 네이티브 코드에 의해 처리 되는 이벤트를 발생 시키는 포함 됩니다.

이 메서드를 호출 하면 처리에 지정 된 메서드 호출 UI 스레드가 Windows 메시지 큐에 메시지를 게시 합니다. 이 메서드는 비동기 메시지 게시 된 후 호출 하는 스레드 반환 됩니다 의미입니다. 반환 되는 IAsyncResult 인스턴스 사용 백그라운드 스레드에서 UI 스레드에서이 메시지의 처리가 완료 된 시기를 확인할 수 있습니다.

다음 코드 호출할 네이티브 Visual Studio 서비스는 백그라운드 스레드에서 액세스할 수 없습니다이 메서드의 사용 방법을 보여 줍니다.

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

표시: