这适用于从File Picker示例创建的Windows Universal App。该示例的基本代码包括Windows Phone项目中的ContinuationManager
类和OnActivated
文件中的App.xaml.cs
方法,以及常见的NavigationHelper
类。
我在解决方案中也使用MediaCapture
和CaptureElement
,但我未能正确处理Resuming
事件。这就是我的工作:
我使用NavigationHelper_LoadState
和NavigationHelper_SaveState
方法来启动和停止相机预览(这是LiveCamera.xaml.cs
文件的一部分)。
private async void NavigationHelper_LoadState(object sender, LoadStateEventArgs e)
{
// Start the camera preview
await StartCameraPreview();
}
private async void NavigationHelper_SaveState(object sender, SaveStateEventArgs e)
{
// Stop the camera preview
await StopCameraPreview();
}
在应用程序内的页面之间导航时效果很好,但在暂停/恢复事件时不会停止/重启摄像机。
我通过添加App.xaml.cs
以下方法来处理Resuming事件(SuspensionManager
负责在恢复应用时调用NavigationHelper_LoadState
方法)来修复此问题:
async void App_Resuming(object sender, object e)
{
await SuspensionManager.RestoreAsync();
}
上面的代码在附加Visual Studio(在调试和释放模式下)执行时效果很好:当接收Suspend / Resume事件并且File Picker正确返回文件时,摄像头预览会停止/重新启动。
但是,如果我在没有Visual Studio的情况下执行应用程序(只是从应用程序列表中启动应用程序),相机预览仍会在接收暂停/恢复事件时停止/重新启动,但在选择带有文件选择器的文件时,我看到"恢复..."进度条,然后应用程序只是崩溃。
选择文件后,App_Resuming
和OnActivated
方法会以某种方式发生冲突。我通过在输入每个方法时显示MessageDialog
来验证这一点(因为我无法使用Visual Studio重新编写问题):在我选择图片后,我在应用程序崩溃之前暂时看到App_Resuming消息(从不看看OnActivated消息)。我不希望在文件选择器之后调用该方法,因为在执行带有VS的应用程序时,该方法不会被调用。
为什么在没有附加VS时会调用不同的(以及我理解的,不正确的)方法?
答案 0 :(得分:0)
问题的存在是因为您在Page的构造函数中运行 FileOpenPicker 。这没什么好处的。为了测试,我在LoadPhoto页面中提供了一个按钮:
在XAML中:
<Grid>
<Button Name="myButton" Content="Click me"/>
<Image x:Name="Image" Stretch="Uniform"/>
</Grid>
在构造函数中:
public LoadPhoto()
{
this.InitializeComponent();
this.navigationHelper = new NavigationHelper(this);
myButton.Click += (sender, e) => LaunchPicker();
}
您可以使用download here。
代码也许你可以先选择一个文件,然后导航到一个页面。