显示和捕获c#异常

时间:2010-05-14 08:12:02

标签: c# .net exception-handling error-handling

我有一个c#程序会抛出NullReferenceException()。当我在我的Vista机器上启动它时,它给出了熟悉的屏幕“Foo已经停止工作”。我可以轻松点击“详细信息”以查看出现了什么问题。在一台XP机器上根本没有警告:程序刚退出,而在另一台XP上,我得到“Foo遇到问题......”的消息。有没有办法可以改变这个(XP的)设置?

此外,我想将此错误消息写入日志文件,因此如果其他人使用我的程序,我可以看到出了什么问题。有没有办法可以将未捕获的异常发送到文件?

编辑:我希望这可以用于整个项目,而不仅仅是关键部分。我不认为建议的做法是将整个程序包装成一个大的try...catch,或者是它?

5 个答案:

答案 0 :(得分:3)

请查看:UnhandledExceptionThreadException

您可以将错误记录在文件中,或使用Windows logging facilities

您也可以尝试thisthis,它应该指向您想要的方向。这是一篇关于你试图解决的完全相同问题的帖子。

答案 1 :(得分:1)

如果您的目标是WPF,则可以使用DispatcherUnhandledException来捕获代码中未处理的任何异常。否则,请确保使用try-catch块捕获任何可预见的异常。

DispatcherUnhandledException的委托中或在try-catch块的catch部分中,您可以调用将错误消息写入日志文件的函数。

答案 2 :(得分:1)

在您认为会失败的所有组件周围添加try catch块,并通过将错误数据流式传输到日志文件来处理这些块

答案 3 :(得分:0)

请看这个链接:

http://blogs.msdn.com/csharpfaq/archive/2006/03/27/562555.aspx

这将帮助您启动并运行。

使用:

try
{
    // Your code here
}
catch (Exception ex)
{
    // This will tell you the Exception
    Console.WriteLine("Exception type: {0}", ex.GetType());
    // or, if you use the example from the link above
    LogMessageToFile(String.Format("Exception type: {0}", ex.GetType));
}

答案 4 :(得分:0)

您可以将代码包装在

try
{
    // Your code
}
catch (Exception ex)
{
    streamWriter.WriteLine("your custom exception text, stack trace:" + ex.StackTrace.ToString());
    MessageBox.Show("Your custom exception text, Stack Trace:" + ex.StackTrace.ToString());
}

并使用指向您选择的日志文件的流编写器对象自行处理反馈。

如果是winforms应用程序,您可以添加一个消息框或自定义对话框,告知用户发生了什么,如上所示。