Share via


VideoDeviceController.TryAcquireExclusiveControl メソッド

定義

指定したデバイス ID を使用してカメラの排他制御を要求します。

public:
 virtual bool TryAcquireExclusiveControl(Platform::String ^ deviceId, MediaCaptureDeviceExclusiveControlReleaseMode mode) = TryAcquireExclusiveControl;
bool TryAcquireExclusiveControl(winrt::hstring const& deviceId, MediaCaptureDeviceExclusiveControlReleaseMode const& mode);
public bool TryAcquireExclusiveControl(string deviceId, MediaCaptureDeviceExclusiveControlReleaseMode mode);
function tryAcquireExclusiveControl(deviceId, mode)
Public Function TryAcquireExclusiveControl (deviceId As String, mode As MediaCaptureDeviceExclusiveControlReleaseMode) As Boolean

パラメーター

deviceId
String

Platform::String

winrt::hstring

排他制御が要求されるカメラのデバイス ID。 デバイス ID は、 DeviceInformation クラスで取得できます。

mode
MediaCaptureDeviceExclusiveControlReleaseMode

排他コントロールが解放される条件を指定する MediaCaptureDeviceExclusiveControlReleaseMode 列挙の値。

戻り値

Boolean

bool

True の 場合は、カメラの排他的な制御が取得されました。それ以外の場合は false。

Windows の要件

デバイス ファミリ
Windows 11 Insider Preview (10.0.23504.0 で導入)
API contract
Windows.Foundation.UniversalApiContract (v15.0 で導入)

この例では、排他制御でカメラを使用するアプリケーションで、キャプチャの開始前にカメラ構成が設定され、その前に排他コントロール ロックを取得することで、このカメラにアクセスできる別のアプリケーションによって変更されないようにする方法を示します。

private static System.Threading.ManualResetEvent _exclusiveLockAcquire = new System.Threading.ManualResetEvent(false);

public static void RecordVideo()
{
    MediaCapture mediacapture = new MediaCapture();
    await mediacapture.InitializeAsync();

    mediacapture.CaptureDeviceExclusiveControlStatusChanged += 
Mediacapture_CaptureDeviceExclusiveControlStatusChanged;

    _exclusiveLockAcquire.WaitOne();
    _exclusiveLockAcquire.Reset();

    // configure camera - blocking other application from changing the configuration.

    // record video
}

private static void Mediacapture_CaptureDeviceExclusiveControlStatusChanged(MediaCapture sender, MediaCaptureDeviceExclusiveControlStatusChangedEventArgs args)
{
    if (args.Status == MediaCaptureDeviceExclusiveControlStatus.ExclusiveControlAvailable)
    {
        if (sender.VideoDeviceController().TryAcquireExclusiveControl(
            args.DeviceId(),     
            MediaCaptureDeviceExclusiveControlReleaseMode.OnAllStreamsStopped))
        {
            _exclusiveLockAcquire.Set();
        }
    }
}

適用対象