0

我的应用程序中有一些代码经常抛出错误(System.AccessViolationException) - 所以我将它包装在一个 try/catch 块中,并在 catch 元素中设置一个调试点和日志记录方法。我发现,自从我这样做以来,错误就停止了——调试点永远不会被命中,也没有任何记录。一旦我从代码中删除尝试,我就会再次收到错误。这可能是什么原因造成的?

代码非常简单:

 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
        }
4

2 回答 2

1

可能有几个选择:

  • MainForm.LogExceptionToFile(ex);没有按预期工作

  • 或者,如果我们 100% 确定该方法,可能注入try/catch块会在代码流中引入微观延迟(由于要执行/控制的 IL 代码更多),这对于不AccessViolationException该机器是必要的。这意味着,您绝对有可能其他机器上遇到该异常。

于 2013-07-08T10:54:08.303 回答
0

不能跳过或捕获 AccessViolation 异常。

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

于 2013-07-08T10:52:59.640 回答