4

在 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 { }
}

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

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

编辑:如果我使用 Visual Studio 的 Suspend/Resume 按钮(在调试位置工具栏上)手动触发事件,该功能将按需要工作(当应用程序恢复时视频会重新启动)。

4

1 回答 1

1

我看到一些错误的地方:

  • 你应该避免async void;用于async Task除事件处理程序之外的所有方法。
  • 对于诸如 的“命令”事件,如果您有事件处理程序Suspending,请使用 提供的延迟。args.SuspendingOperation.GetDeferralasync
于 2013-01-27T22:01:03.180 回答