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

使用模板10在UWP应用程序中创建第二个窗口时出现异常0xE0434352,uwp,template10,Uwp,Template10,我找到了,也找到了一个相关的答案,但当我尝试使用模板10实现多个窗口时,仍然会遇到例外 (我还发现了这样一个问题,它似乎建议完全跳出模板10,直接使用框架。当我在答案中尝试代码时,我得到了一个CLR异常。因此我放弃了这种方法,回到了其他问题) 据我从描述和中了解,您需要创建一个新的框架和导航服务,将导航服务分配给您的框架,然后使用导航服务导航到新页面 我在导航的页面的ViewModel中尝试了这段代码,但在创建框架时,第一行出现异常0xE0434352 Frame secondaryFrame

我找到了,也找到了一个相关的答案,但当我尝试使用模板10实现多个窗口时,仍然会遇到例外

(我还发现了这样一个问题,它似乎建议完全跳出模板10,直接使用框架。当我在答案中尝试代码时,我得到了一个CLR异常。因此我放弃了这种方法,回到了其他问题)

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

我在导航的页面的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对这个问题的回答,我现在在GitHub上找到了多个窗口的UWP示例。它在UWP示例的1.1.13p版本中提供,位于/samples/MultipleViews/ViewModels/

我最初使用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。 我已经在我的第二页上尝试过了,另一页通常打开时没有问题,我创建了一个空白页。所有尝试都会得到相同的异常

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

您可以使用
NavigationService
方法实现此行为

您还可以使用
ViewService
方法

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

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

您可以使用
NavigationService
方法实现此行为

您还可以使用
ViewService
方法


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

我发现了导致异常的原因。
导航服务在示例中仅被引用为“
NavigationService
”时为空。
我不得不引用它为
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)  
            {

            }
        }
    });
}

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

我发现了导致异常的原因。
导航服务在示例中仅被引用为“
NavigationService
”时为空。
我不得不引用它为
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)  
            {

            }
        }
    });
}

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

感谢您的回复。我是否应该创建第二个导航服务?是的,如果将窗口当前内容设置为
secondaryFrame
,尽管可以创建多个窗口,但原始窗口内容将变为
secondaryFrame
。这将很难管理。对不起,我觉得这个答案和评论很难理解。我想打开另一个包含不同内容的窗口,同时保持主窗口不变。我已经尝试过使用第一个NavigationService的OpenAsync函数打开第二个窗口,但没有成功。你是说这是正确的吗?我的代码在ViewModel中,所以可能是线程问题。您能否共享一个示例来重现此问题?我已在ViewModel中测试了您的代码。它在我这边起作用。谢谢你的回复。我是否应该创建第二个导航服务?是的,如果将窗口当前内容设置为
secondaryFrame
,尽管可以创建多个窗口,但原始窗口内容将变为
secondaryFrame
。这将很难管理。对不起,我觉得这个答案和评论很难理解。我想打开另一个包含不同内容的窗口,同时保持主窗口不变。我已经尝试过使用第一个NavigationService的OpenAsync函数打开第二个窗口,但没有成功。你是说这是正确的吗?我的代码在ViewModel中,所以可能是线程问题。您能否共享一个示例来重现此问题?我已在ViewModel中测试了您的代码。它在我这边起作用。
   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)  
            {

            }
        }
    });
}