我处于一个棘手的位置。我有一个已发布的应用程序并且一直在接收崩溃报告。其中大部分是InvalidOperationException
. 堆栈跟踪中的所有 19 帧都显示了内部函数,因此我无法弄清楚是哪个函数引发了它。经过大量调试,我认为我的 InvalidOperation Exception 是由我将导航重定向到登录页面的方式引起的。
基本操作是这样的。如果用户设置了密码,它将导航到密码页面,否则导航到 MainPage。代码如下
App()
{
// the usual code
RootFrame.Navigating += new NavigatingCancelEventHandler(RootFrame_Navigating);
}
void RootFrame_Navigating(object sender, NavigatingCancelEventArgs e)
{
if (e.Uri.ToString().Contains("/RootPage.xaml") != true)
return;
CycleManager pCycMan = CycleManager.Instance;
e.Cancel = true;
RootFrame.Dispatcher.BeginInvoke(delegate
{
if (pCycMan.GetPasswordEnabled())
RootFrame.Navigate(new Uri("/PasswordPage.xaml", UriKind.Relative));
else
RootFrame.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
});
}
上面提到的RootPage是在<App>
tag中定义的WMAppManifest.xml
<Tasks>
<DefaultTask Name="_default" NavigationPage="RootPage.xaml" />
</Tasks>
在调试上述代码时,我发现与 StackTrace 相同的调用堆栈。有人可以告诉我这是否是导航到其他主页的正确方法吗?我在下面包含了 StackTrace
"Frame Image Function Offset
0 coredll.dll xxx_RaiseException 19
1 mscoree3_7.dll 436488
2 mscoree3_7.dll 386545
3 mscoree3_7.dll 540936
4 TransitionStub 0
5 System.Windows.Navigation.NavigationService.Navigate 1580
6 System.Windows.Controls.Frame.Navigate 80
7 .__c__DisplayClass5._Application_Activated_b__3 136
8 mscoree3_7.dll 429164
9 mscoree3_7.dll 185803
10 mscoree3_7.dll 84423
11 System.Reflection.RuntimeMethodInfo.InternalInvoke 112
12 System.Reflection.RuntimeMethodInfo.InternalInvoke 1564
13 System.Reflection.MethodBase.Invoke 104
14 System.Delegate.DynamicInvokeOne 564
15 System.MulticastDelegate.DynamicInvokeImpl 84
16 System.Windows.Threading.DispatcherOperation.Invoke 80
17 System.Windows.Threading.Dispatcher.Dispatch 404
18 System.Windows.Threading.Dispatcher.OnInvoke 56
19 System.Windows.Hosting.CallbackCookie.Invoke 84"
感谢您耐心阅读这么长的问题。