4

MediaCaptureクラス( )を使用してWebカメラフィードを表示するWindows 8アプリ(C#)Windows.Media.Captureで、アプリが失われたときにプレビューを再開してから、フォーカスを取り戻そうとしています(たとえば、画面の左上隅をクリックして別のアプリに移動します)アプリをクリックしてから、もう一度クリックしてアプリに戻ります)。

今プレビューを再開しようとしている方法は次のとおりです。

Application.Current.Resuming += (sender, o) => StartVideo(video);
Application.Current.Suspending += (sender, args) => StopVideo();

internal async void StartVideo(CaptureElement e)
{
    try
    {
        this.stream = new MediaCapture();
        await this.stream.InitializeAsync();
        e.Source = this.stream;
        await this.stream.StartPreviewAsync();
    }
    catch
    {
        new MessageDialog("Unable to start the video capture.").ShowAsync();
    }
}

internal async void StopVideo()
{
    try
    {
        await stream.StopPreviewAsync();
    }
    catch { }
}

ただし、上記の例では、ResumingandSuspendingイベントは発生しないようです。これはアプリを「一時停止」していませんか?もしそうなら、それは何ですか/私はどのようなイベントに注意を払うべきですか?

または、長時間実行される「プレビュー」を使用してWebカメラを表示する代わりに、いずれかのthis.stream.StartRecord...方法を使用する必要がありますか?

編集: Visual Studioの[一時停止/再開]ボタン([デバッグの場所]ツールバー)を使用してイベントを手動で発生させると、機能は希望どおりに機能します(アプリが再開されるとビデオが再開します)。

4

1 に答える 1

1

私はいくつか間違っていると思います:

  • 避けるべきasync voidです; async Taskイベント ハンドラーを除くすべてのメソッドに使用します。
  • などの「コマンド」イベントの場合、イベント ハンドラがある場合は、Suspendingによって提供される遅延を使用します。args.SuspendingOperation.GetDeferralasync
于 2013-01-27T22:01:03.180 に答える