C# 出口代码3
我有一个简单的永无止境的winforms后台应用程序,它将网络摄像头中的图片保存在硬盘上,对它们进行一些处理,然后删除它们。图片保存和处理是两个独立的过程,第一个过程稍微快一点。为了不让磁盘上的图片过载,我对目前可以保存的图片数量设置了一个限制。为此,我使用字符串队列 问题是,有时应用程序崩溃,退出代码为3,错误路径未找到。从我的代码来看,这似乎是不可能发生的,因为我只使用了一条路径,而且在任何情况下它都不会受到影响。我也在try-catch块中设置了所有可能的内容,但没有捕获任何内容。我认为它可能来自我使用的两个更大的库中的一个。有没有办法知道这件讨厌的事情发生在哪里 好的,下面是保存图像的代码:C# 出口代码3,c#,winforms,C#,Winforms,我有一个简单的永无止境的winforms后台应用程序,它将网络摄像头中的图片保存在硬盘上,对它们进行一些处理,然后删除它们。图片保存和处理是两个独立的过程,第一个过程稍微快一点。为了不让磁盘上的图片过载,我对目前可以保存的图片数量设置了一个限制。为此,我使用字符串队列 问题是,有时应用程序崩溃,退出代码为3,错误路径未找到。从我的代码来看,这似乎是不可能发生的,因为我只使用了一条路径,而且在任何情况下它都不会受到影响。我也在try-catch块中设置了所有可能的内容,但没有捕获任何内容。我认为它
void videoSource_NewFrame(object sender, AForge.Video.NewFrameEventArgs eventArgs)
{
videoSource.NewFrame -= videoSource_NewFrame;
if (snapshotsQueue.Count < 100)
{
Image myImage = (Image)eventArgs.Frame.Clone();
string strGrabFileName;
if (firstFrame)
{
firstFrame = false;
// extension is png
strGrabFileName = String.Format(
"{0}\\{1}.{2}", snapshotsPath, "0.0",
snapshotExtension.ToString().ToLowerInvariant());
snapshotTimer.Start();
}
else
{
strGrabFileName = String.Format(
"{0}\\{1}.{2}", snapshotsPath,
snapshotTimer.Elapsed.TotalSeconds.ToString(CultureInfo.InvariantCulture), snapshotExtension.ToString().ToLowerInvariant());
}
try
{
myImage.Save(strGrabFileName, snapshotExtension);
snapshotsQueue.Enqueue(strGrabFileName);
}
catch (Exception e)
{
writeError(e.Message);
writeToLog(e.Message);
}
}
Thread.Sleep(100);
if (videoSource != null)
{
videoSource.NewFrame += videoSource_NewFrame;
}
}
您可以捕获线程异常和所有未处理的异常:
这将捕获其他地方未捕获的所有异常!
UnhandledExceptionEventHandler从主UI线程捕获异常,而ThreadExceptionEventHandler在非UI线程中收到未捕获异常的通知
欲了解更多信息,请参阅和上的MSDN。你甚至可能需要设置这个参数 我真的不建议把这作为一个长期的答案,但你可以做一个全面的应用程序捕获,甚至重新启动你的应用程序
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.OnThreadException += MyHandler;
AppDomain.CurrentDomain.UnhandledException += otherHandler;
您可以将其放入应用程序的program.cs中
我建议您考虑将其转换为服务,而不是持续运行的应用程序。。我也情不自禁地感觉到,在应用程序的某个地方,存在一些错误陷阱,你可以做得更优雅一些
在您的处理程序中,您当然可以使用该半终端
Application.Restart();
这与听起来完全一样。在继续编写代码之前,您可以添加检查以查看or是否存在。也许这会引起一些问题?要解决这个问题,你应该提供一些代码来显示你的支付能力和例外情况。@MarleenSchilt已经这样做了。作为记录,从我的观点来看,问题不应该发生在丢失的文件上,因为这将是一个不同的错误,因为退出代码3是专门针对directorywow的,比如下一票。我不在乎,但有什么问题吗?好吧,您可以只提供引发异常的相关代码,而不是整个应用程序-至少我想是的。我会试试这个,谢谢。希望,我不必永远等待它的发生。不幸的是,这也没有抓住任何东西。。。为了确保这一点,我将它放在程序主方法和表单主方法中。应用程序仍然只是偶尔停止工作,根本不会抛出任何异常。。。
Application.SetUnhandledExceptionMode(UnhandledExceptionMode.CatchException);
Application.OnThreadException += MyHandler;
AppDomain.CurrentDomain.UnhandledException += otherHandler;
Application.Restart();