UWP 导航导致访问冲突

本文关键字:访问冲突 导航 UWP | 更新日期: 2023-09-27 18:33:34

我正在将我的WP 8.1应用程序转换为UWP,由于我对使用棱镜感兴趣,我想我会从头开始构建我的应用程序。我创建了一个带有按钮的页面,可以导航到另一个页面,部署应用程序并试一试。当我单击按钮进行导航时,将执行以下代码

private void Button1_Click(object sender, RoutedEventArgs e)
{
    this.Frame.Navigate(typeof(TestPage));
}

然后使应用程序崩溃。当我查看VS2015中的输出窗口时,我在底部看到以下内容。

The program '[4760] MyApp.exe' has exited with code -1073741819 (0xc0000005) 'Access violation'.

两个页面都有视图模型,并使用棱镜ViewModelLocator.AutoWireViewModel进行设置。我尝试清除 ViewModel 的所有属性,使它们为空,没有代码,但这没有任何作用。在视图模型构造函数中放置一个断点,调试时它会到达这一点。

知道这意味着什么或在哪里寻找吗?

更新:问题看起来像是由控件模板引起的。我通过注释掉所有 XAML,然后逐个添加内容,将问题缩小到按钮控件。然后,我找到了导致问题的控件,因此删除了绑定和样式模板。重新添加绑定,一切正常,重新添加模板并出现问题。

UWP 导航导致访问冲突

您可能需要使用调度程序在正确的线程上执行代码。

//Initiate and set this at the startup of your app, on the UI thread.
dispatcher = Windows.UI.Core.CoreWindow.GetForCurrentThread().Dispatcher;

然后使用调度程序运行代码:

private async void Button1_Click(object sender, RoutedEventArgs e)
{
    await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
            this.Frame.Navigate(typeof(TestPage));
}