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 スレッドでのみ実行コードを実行する必要があります。マルチスレッドのシナリオで役立ちます。このようなコードはネイティブ コードのシングルスレッド COM コンポーネントとして実装されるグローバル Visual Studio のサービスを、特にアクセス含まれます。

このメソッドが呼び出されると、処理で指定したメソッドを呼び出す UI スレッドでウィンドウのメッセージ キューにメッセージを追加します。このメソッドは、UI スレッドがメソッドの処理が完了するまで、同期呼び出し元スレッドがブロックされます)。

Caution メモ注意

UI スレッドが呼び出し元のスレッドが現在ロックされているオブジェクトのロックを待機するときにこのメソッドを呼び出すと、プロセスでデッドロックが発生します。複数のスレッド間でのロックのベスト プラクティスは、この問題の発生を最小限に抑えることができます。

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