当应用程序重新聚焦时重新启动媒体捕获

本文关键字:重新启动 媒体 聚焦 应用程序 新聚焦 | 更新日期: 2023-09-27 17:56:19

在Windows 8应用程序(C#)中使用MediaCapture类(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 { }
}

但是,在我上面描述的示例中,ResumingSuspending事件似乎没有触发。这不是"暂停"应用程序吗?如果是这样,它是什么/我应该注意哪些事件?

或者,我是否应该使用this.stream.StartRecord...方法之一,而不是使用长时间运行的"预览"来显示网络摄像头?

编辑:如果我使用Visual Studio的"挂起/恢复"按钮(在"调试位置"工具栏上)手动触发事件,则功能将按预期工作(视频在应用程序恢复时重新启动)。

当应用程序重新聚焦时重新启动媒体捕获

我看到一些错误:

  • 应避免async void;对除事件处理程序之外的所有方法使用 async Task
  • 对于"命令"事件(如 Suspending ),如果您有 async 事件处理程序,请使用 args.SuspendingOperation.GetDeferral 提供的延迟。