Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# try/catch块能否防止错误发生?_C#_.net_Try Catch - Fatal编程技术网

C# try/catch块能否防止错误发生?

C# try/catch块能否防止错误发生?,c#,.net,try-catch,C#,.net,Try Catch,我的应用程序中有一些代码每隔一段时间就会抛出一个错误(System.AccessViolationException)——因此我将其包装在一个try/catch块中,并在catch元素中设置调试点和日志记录方法。我发现,自从我这么做之后,错误已经停止发生了——调试点从未命中,也没有记录任何内容。一旦我从代码中删除try,我就会再次得到错误。这可能是什么原因造成的 代码非常简单: try { var f1 = new ResizeNearestNeighb

我的应用程序中有一些代码每隔一段时间就会抛出一个错误(System.AccessViolationException)——因此我将其包装在一个try/catch块中,并在catch元素中设置调试点和日志记录方法。我发现,自从我这么做之后,错误已经停止发生了——调试点从未命中,也没有记录任何内容。一旦我从代码中删除try,我就会再次得到错误。这可能是什么原因造成的

代码非常简单:

 try
        {
            var f1 = new ResizeNearestNeighbor(lfu.Width, lfu.Height);
            var f2 = new Crop(ViewRectangle);
            lfu = f2.Apply(lfu);
            lfu = f1.Apply(lfu);
        }
        catch (Exception ex)
        {
            MainForm.LogExceptionToFile(ex);//never hit
        }

无法跳过或捕获AccessViolation异常


每次发生此异常时,都会抛出它

可能有两种选择:

  • 或者
    MainForm.logexceptionfile(ex)
    ;没有按预期的那样工作

  • 或者,如果我们对该方法有100%的把握,可能是注入
    try/catch
    块在代码流中引入了微延迟(由于要执行/控制的IL代码更多),这是在该机器上不获取
    AccessViolationException
    所必需的。也就是说,你完全有可能在其他机器上得到这个异常


不,它不能。如果错误被捕获而不再抛出,它将防止错误向调用堆栈上传播。听起来像是另一个间歇性错误,很烦人,不是吗。检查一下你是否在代码的其他地方声明了f1,f2。如果你知道这是一个AVException,那么为什么你不抓住它呢?因为我只是想弄清楚它到底出了什么问题。此外,成功完成的方法对应用程序的操作并不重要。我认为它是在您到达catch块之前抛出的。嗯。。。LogExceptionToFile(ex)确实有效(它是静态的)我倾向于你的微观延迟理论,尽管它完全停止了错误,这很奇怪-我原以为这只会让它不太可能…@Sean:这是关于微elay的一些东西,依我看,它在your机器上“解决”访问问题(通常是时间问题),但正如您所说,它可能是。这意味着,正如你所说的,它在你的机器上变得更加罕见,而且很可能在其他机器上仍然存在