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

Exception 0xE0434352 when creating a second window in UWP app with Template 10

我找到了 , and also a relevant answer here,但是当我尝试使用模板 10 实施多个 windows 时,我仍然遇到异常。

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

据我从描述中了解到here and ,您需要创建一个新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面.

我在导航页面的 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

为什么创建Frame会出现异常?
上面的代码是否正确打开辅助 window?

编辑: 感谢 mvermef 在 this question, I have now found the UWP sample for multiple windows on GitHub. It is available in version 1.1.13p of the UWP samples, in /Samples/MultipleViews/ViewModels/, here.

上的回答

我最初尝试使用 NavigationService.OpenAsync() 打开辅助 window 与示例中相应的代码行相同。 这是函数:

        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。 我已经在我的辅助页面上尝试过,另一个页面通常可以毫无问题地打开,并且我创建了一个空白页面。所有尝试都会出现相同的异常。

As far as I understand from the descriptions here and here, you need to create a new frame and navigation service, assign the navigation service to your frame, and then use the navigation service to navigate to the new page.

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

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

您也可以使用 ViewService OpenAsync 方法。

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

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

我发现似乎是什么导致了异常。
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)  
            {

            }
        }
    });
}

(该模块包含在 "using" 中并作为参考,显然我有几次 clean/built)