我需要一些建议。
我有一个在晚上运行的Windows服务。在我的开发环境中,它可以无异常地运行,但是当我在“其他机器上安装并运行”时,第二天早上我会遇到一个System.Overflow异常,提示我将int32设置为太大或太小的值。
我已经仔细检查了服务的c#代码,并且在所有可能出错的代码周围都加入了try/catch语句,应该能捕获任何错误并将其写入日志,而不会因为这个溢出异常完全停止我的服务。但是,它仍然会出现并停止服务。
我希望能得到一些概念性的建议,以确定引起这种错误的原因。
我需要一些建议。
我有一个在晚上运行的Windows服务。在我的开发环境中,它可以无异常地运行,但是当我在“其他机器上安装并运行”时,第二天早上我会遇到一个System.Overflow异常,提示我将int32设置为太大或太小的值。
我已经仔细检查了服务的c#代码,并且在所有可能出错的代码周围都加入了try/catch语句,应该能捕获任何错误并将其写入日志,而不会因为这个溢出异常完全停止我的服务。但是,它仍然会出现并停止服务。
我希望能得到一些概念性的建议,以确定引起这种错误的原因。
在代码中添加 try/catch
块的问题是很容易错过某些地方,从而无法记录异常。更为健壮的方法是使用值 AppDomain.UnhandledException
。这将触发任何未在当前 AppDomain
中处理的异常。您可以连接到此以将信息写入日志文件,并希望更好地了解错误产生的位置。
AppDomain.CurrentDomain.UnhandledException += OnUnhandledException;
...
void OnUnhandledException(object sender, UnhandledExceptionEventArgs e) {
// Log the exception here
}
http://msdn.microsoft.com/en-us/library/system.windows.forms.application.threadexception.aspx
还有WPF:
http://msdn.microsoft.com/en-us/library/system.windows.application.dispatcherunhandledexception.aspx
为了在UI线程上获得异常的可见性,因为它们不会被转发到AppDomain.CurrentDomain.UnhandledException。