使用模板10在UWP应用程序中创建第二个窗口时出现异常0xE0434352

时间:2017-10-27 15:28:19

标签: uwp template10

我找到了this SO question,还有一个相关的答案here,但是当我尝试使用模板10实现多个窗口时,我仍然遇到异常。

(我还发现了this SO问题,似乎建议完全跳出Template 10,并直接使用Frame。当我在答案中尝试代码时,我得到了一个CLR异常。所以我放弃了那种方法并回到其他问题)。

据我所知herehere,您需要创建新的框架和导航服务,将导航服务分配到您的框架,然后使用导航服务进行导航到新页面。

我在导航的页面的ViewModel中尝试了此代码,但在创建框架时,它在第一行获得异常0xE0434352。

Frame secondaryFrame = new Frame();      //--->Exception 0xE0434352
var secondaryNav = BootStrapper.Current.NavigationServiceFactory(BootStrapper.BackButton.Attach, BootStrapper.ExistingContent.Exclude, secondaryFrame);
secondaryNav.Navigate(typeof(MySecondaryPage));
Window.Current.Content = secondaryFrame; //activation

为什么创建框架会出现异常?
上面的代码是否正确用于打开辅助窗口?

修改 感谢mvermef对this问题的回答,我现在已经在GitHub上找到了多个窗口的UWP示例。它可以在版本1.1.13p的UWP样本中找到,在/ Samples / MultipleViews / ViewModels /,here中。

我使用NavigationService.OpenAsync()打开辅助窗口的原始尝试与示例中的相应代码行相同。 这是功能:

        private async void MyEventHandler(bool openSecondaryWindow)
    {
        await DispatcherWrapper.Current().DispatchAsync(async () =>
        {
            if (openSecondaryWindow)
            {
                try
                {
                   //the next line gets exception 0xE0434352
                    var control = await NavigationService.OpenAsync(typeof(MySecondaryPage), null, Guid.NewGuid().ToString());  

                    control.Released += Control_Released;
                }
                catch (Exception ex)  
                {

                }
            }
        });
    }

它仍然会出现异常0xE0434352。 我已经尝试使用我的辅助页面,其他页面通常打开没有问题,并且我创建了一个空白页面。所有尝试都会遇到同样的异常。

2 个答案:

答案 0 :(得分:0)

  

据我在此处和此处的说明中所理解,您需要创建新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面。

您可以使用NavigationService OpenAsync方法以不同的方式实现此行为。

await NavigationService.OpenAsync(typeof(Views.TestPage));

您还可以使用ViewService OpenAsync方法。

var viewservice = new ViewService();
await viewservice.OpenAsync(typeof(Views.TestPage));

请确保在UI线程中调用它。

答案 1 :(得分:0)

我发现了似乎引起异常的事情 当示例中简称为“NavigationService”时,NavigationService为null 我必须将其引用为BootStrapper.Current.NavigationService

以下是有效的代码:

   private async void MyEventHandler(bool openSecondaryWindow)
{
    await DispatcherWrapper.Current().DispatchAsync(async () =>
    {
        if (openSecondaryWindow)
        {
            try
            {
                var control = await BootStrapper.Current.NavigationService.OpenAsync(typeof(MySecondaryPage), null, Guid.NewGuid().ToString());  
                control.Released += Control_Released;
            }
            catch (Exception ex)  
            {

            }
        }
    });
}

(该模块包含在“使用”中并作为参考,显然我已经多次清理/构建了)