使用模板 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)
我找到了
(我还发现了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)