1

我正在尝试为 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。但是,我的 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: 
4

2 回答 2

3

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

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

作为临时措施,请尝试:

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

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

于 2013-03-09T08:33:17.967 回答
0

这是打印异常消息的最佳方法,以便您知道问题出在哪里:

try{}
catch(Exception ex)
{
    await new MessageDialog("Error message:\n\n" + ex.message).ShowAsync();
}
于 2016-01-16T07:00:01.250 回答