如何在Windows Phone中打印异常?

时间:2013-03-09 06:25:31

标签: c# windows-phone-8

我正在尝试为Windows Phone 8编写应用程序代码。我想将屏幕上的异常打印出来。所以这就是我在做的事情:

try
            {
               //The code which I want to handle for exception
            }
            catch (Exception e)
            {
                ErrorStatus.Text = e.Message + "\n\n" + e.Source + "\n\n" + e.StackTrace;
            }

其中ErrorStatus是我的TextBlock。 但是,我的catch块中唯一的一行是在运行时给出了异常。例外是:

A first chance exception of type 'System.UnauthorizedAccessException' occurred in System.Windows.ni.dll An exception of type 'System.UnauthorizedAccessException' occurred in System.Windows.ni.dll and wasn't handled before a managed/native boundary

我在语法上做错了吗?我是C#编程以及Windows Phone编程的新手。

编辑:

例外的更多细节:

System.UnauthorizedAccessException was unhandled by user code
HResult=-2147024891
Message=Invalid cross-thread access.
Source=System.Windows
InnerException: 

2 个答案:

答案 0 :(得分:3)

您需要从UI线程显示您的消息:Web调用始终在后台工作线程上回调。因此,您需要调用Dispatcher以使其在UI线程上运行。

您也可以使用Exception.ToString()将消息内容显示为字符串。这样做的好处是还可以在您正在处理的异常中显示任何嵌套异常。

作为一项临时措施,请尝试:

catch (Exception e)
{
    Deployment.Current.Dispatcher.BeginInvoke(() =>
    {
        ErrorStatus.Text = e.ToString();
    }
}

更永久地,您应该修复问题或将其记录到文件中,这样您就不会捕获掩盖代码中的错误的异常。

答案 1 :(得分:0)

这是打印出异常消息的最佳方式,以便您可以知道问题所在:

try{}
catch(Exception ex)
{
    await new MessageDialog("Error message:\n\n" + ex.message).ShowAsync();
}