为什么MessageBox.Show会导致UnhandledException?

时间:2012-02-26 04:16:01

标签: c# silverlight windows-phone-7 windows-phone

我正在开发一个使用位置服务的应用。如果我正在调试,该应用程序工作正常。如果我在没有调试的情况下启动,在第一次运行时(重建后),它在请求授权使用位置服务时崩溃。会发生什么事情,如果你让它坐下来,消息框显示足够长(5-10秒),它就会崩溃。如果我没有再次调试就开始了,它运行正常(虽然它没有再次显示消息框,因为它以某种方式通过该行到达条件语句之后的下一行,其中它设置第一次运行false(我假设,因为它没有再来一次。)

再次,如果我正在调试,没有问题。如果我开始没有调试,它就会死掉。在Debug或Release模式下构建时就是这种情况。

如果我将这段代码注释掉,它会毫无问题地执行。如果我快速单击“确定”,它会毫无问题地执行。

 if (settings.FirstRunLocationPermission)
              {
                    string message = "Do you wish to use location services to see your location on the map? Your location is not being tracked. You can change this authorization in the settings.";
                    //if (MessageBox.Show(message,"authorization",MessageBoxButton.OKCancel) == MessageBoxResult.OK)
                    //{
                    //      settings.AllowLocation = true;
                    //}
                    settings.FirstRunLocationPermission = false;
              }

如果有人能向我解释为什么检查ok的简单消息框会导致这样的问题,我将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:2)

很可能你在OnNavigatedTo中显示MessageBox。如果是这种情况,this SO answer应该有所帮助。问题是如果用户没有按下按钮,你的应用程序就会崩溃,因为框架认为导航失败了。

是的,只有在未附加调试器的情况下才会出现此行为。

答案 1 :(得分:1)

如果您查看该方法的MSDN文档,可能存在异常的原因非常明确:

MDSN - MessageBox.Show Method

另一种可能性是setter中运行了一些代码来运行异常的settings.AllowLocation属性。如果你包含了抛出的实际异常,那将会有所帮助。

答案 2 :(得分:1)

我以这种方式使用它,它起作用:

var msg = MessageBox.Show("Do you .... ?", "Title", MessageBoxButton.OKCancel);
if(msg == MessageBoxResult.OK)
{
   //Do something;
}
祝你好运