C# 如何在不关闭应用程序的情况下处理异常?
我有一个通过WPF C应用程序发送电子邮件的尝试,如下所示:C# 如何在不关闭应用程序的情况下处理异常?,c#,wpf,exception-handling,C#,Wpf,Exception Handling,我有一个通过WPF C应用程序发送电子邮件的尝试,如下所示: try { smtpmail.Send(message); } catch (Exception err) { throw new CustomException("Error contacting server.", err); } 但是,如果出现此错误,我不希望应用程序停止运行/崩溃。相反,只需将错误更改为我在应用程序中设置的错误消息文本框…或与不使应用程序崩溃相关的内容,而是通知用户稍后重试,或者如果问
try { smtpmail.Send(message); }
catch (Exception err) { throw new CustomException("Error contacting server.", err); }
但是,如果出现此错误,我不希望应用程序停止运行/崩溃。相反,只需将错误更改为我在应用程序中设置的错误消息文本框…或与不使应用程序崩溃相关的内容,而是通知用户稍后重试,或者如果问题仍然存在:请与某某联系
编辑:预期:要记录的错误,但用户看到了这一点
errorMsg.Text = "Error contacting server. Try again later, or if problem persists contact Billy Bob Boo";
我如何着手实施这一点
更新:对于这个不清楚的问题表示歉意。基本上,我需要关于如何记录我的错误的帮助,但向用户显示一条友好的错误消息……但我要求得很差。使用提供的评论和答案,我做了更多的研究,回答了下面我自己的问题。谢谢大家 为什么要捕获异常,然后再次抛出它?这似乎不是很有效 您可以使用messagebox
try {
smtpmail.Send(message);
}catch (Exception err) {
MessageBox.Show(err.Message, "Exception", MessageBoxButton.OK, MessageBoxImage.Error);
}
编辑:你刚才说你不想让用户知道这个异常。好吧,那就让catch块空着吧:我是如何解决我的问题的:
bool success = false;
try {
//try to send the message
smtpmail.Send(message);
success = true;//everything is good
}
catch (Exception err)
{
//error with sending the message
errorMsg.Text = ("Unable to send mail at this time. Please try again later.");
//log the error
errorLog.Log(err); //note errorLog is another method to log the error
//other stuff relating to certain parts of the application visibility
}
finally
{
if (success)
{
//what to do if the email was successfully sent
}
}
如果你要抛出,你需要在某个地方捕获。如果你不想抛出错误,为什么你要捕获错误,然后抛出另一个异常?可能抛出了一个异常,你的程序崩溃,因为你抛出了一个异常。你接住它,但它会重新扔出去。捕获链上更远的错误并记录/显示错误消息但不要使程序崩溃,或者在此处执行该操作。@Savanna我捕获并声明异常错误,但不要在任何地方使用它。我不想让用户确切地知道错误是什么,所以我抛出了一个CustomException你被困在哪里?你知道如何将文本放入文本框吗?解决方案的哪一部分让你困惑?只需将catch块留空,这是一个糟糕的建议。异常至少应该被记录下来,一条不一定透露细节的错误消息也应该显示出来。@tnw我这么说是因为他说他不想在任何地方使用它,也不想让用户知道它。但你是对的,他至少应该把它记录到一个文件或什么的。是的,我至少想把它记录到某个地方。尽管我会对其进行一些调整,这样用户就不会进入完成页面,但答案仍然有效。为什么要挂成功旗?只需将这些操作放在smtpmail.Send之后。最后,无论是否引发异常,都应该使用块来执行代码。