当应用重新聚焦时重新启动MediaCapture

时间:2013-01-27 21:06:29

标签: c# windows-8 windows-runtime windows-store-apps

在使用MediaCapture类(Windows.Media.Capture)显示网络摄像头Feed的Windows 8应用程序(C#)中,我尝试在应用程序丢失后重新启动预览,然后再返回焦点(例如,通过单击左上角的屏幕角落到另一个应用程序,然后再次单击以返回到我的应用程序)。

我现在如何尝试重新启动预览:

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的“暂停/恢复”按钮(在“调试位置”工具栏上)手动触发事件,则该功能可以根据需要运行(恢复应用时视频会重新启动)。 / p>

1 个答案:

答案 0 :(得分:1)

我看到一些错误:

  • 你应该避免async void;对事件处理程序以外的所有方法使用async Task
  • 对于Suspending等“命令”事件,如果您有args.SuspendingOperation.GetDeferral事件处理程序,请使用async提供的延迟。