我正在尝试为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:
答案 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();
}