IVsDataHostService.BeginInvokeOnUIThread メソッド

非同期に引数の指定されたリストとの Visual Studio プロセスで実行される、メイン (UI) スレッドの指定したメソッドを実装します。

名前空間:  Microsoft.VisualStudio.Data.Core
アセンブリ:  Microsoft.VisualStudio.Data.Core (Microsoft.VisualStudio.Data.Core.dll 内)

構文

'宣言
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

パラメーター

  • method
    型 : System.Delegate
    args パラメーターに指定されている数および型と同じ数および型のパラメーターをとるメソッドへのデリゲート。
  • args
    型 : array<System.Object[]
    指定したメソッドに引数として渡すオブジェクトの配列。メソッドが引数をとらない場合、このパラメーターは nullnull 参照 (Visual Basic では Nothing) になります。

戻り値

型 : System.IAsyncResult
この操作の結果を表す IAsyncResult のインスタンス。

解説

このメソッドは、バックグラウンド スレッドで動作し、定期的な操作に更新プログラムの UI スレッドに通知する必要があるマルチスレッドのシナリオで役立ちます。このようなシナリオは、ネイティブ コードのシングルスレッド COM コンポーネントによって処理されるイベントを発生させることがあります。

このメソッドが呼び出されると、処理で指定したメソッドを呼び出す UI スレッドで Windows メッセージ キューにメッセージをポストします。このメソッドは、メッセージがポストされている場合、非同期呼び出し元のスレッドが同時に戻ることを意味します)。バックグラウンド スレッドによって返された IAsyncResult のインスタンスが UI スレッドでこのメッセージの処理が完了したときに確認することができます。

次のコードは、このメソッドの 1 とおりの使用をバックグラウンド スレッドからアクセスできないネイティブ 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
    }
}

.NET Framework セキュリティ

  • 直前の呼び出し元に対する完全な信頼。このメンバーは、部分的に信頼されているコードから使用することはできません。詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

参照

関連項目

IVsDataHostService インターフェイス

Microsoft.VisualStudio.Data.Core 名前空間