c# - Winform 出现 Red X 异常

标签 c# .net winforms

我正在使用第 3 方控件 (ComponentOne),我会间歇性地得到这个典型的红色 X 框,如这个典型的图像所示。起初我以为我有 GDI 泄漏,所以在做了一些腿部工作后,我确认我的 GDI 编号在绘制控件时没有问题。

enter image description here

在谷歌搜索后我发现这种错误发生在 OnPaint() 事件上,因此即使我在调用控件渲染时 try catch ,它也不会捕获它。

所以我的下一步是在我的代码中覆盖以下内容。

        protected override void OnPaint(PaintEventArgs e)
       {
           try
           {
               base.OnPaint(e);
           }
           catch (Exception ex)
           {
               this.Invalidate();  //attempt to redraw the control
               XmSam.Log(ex);
           }
       }

我认为这应该可以解决问题,但我不能一直重现这个问题,所以我还不能完全测试上面的代码。我的问题是,如果我呈现我的控件并且它有异常,那么这段代码将尝试重绘控件。这会陷入无限循环并卡住我的 UI 吗?还是您认为导致异常的任何原因都会消失,并且在第二次重绘控件时应该可以正常渲染?

最佳答案

I think that should do the trick

不,你让事情变得更糟了。现在您的 OnPaint() 方法一遍又一遍地运行,可能会反复遇到同一个异常。您也会看到您的程序也 100% 消耗了核心资源。

在 OnPaint() 中获得异常并不是您真正可以生存的事情。用户无需查看任何内容,这是有保证的支持电话。与其隐藏问题,不如使用异常找出实际出错的地方并修复问题。使用 Debug + Exceptions,勾选 CLR 异常的 Thrown 复选框,这样调试器将在引发异常时停止。以防万一,在框架代码中引发异常的可能性不大,还可以使用工具 + 选项、调试并取消选中“仅启用我的代码”选项。

关于c# - Winform 出现 Red X 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17927128/

相关文章:

c# - 有一个同步处理程序和一个异步处理程序

c# - 使用 C# 和 IIS 7 保护大量下载

.net - N 层 POCO/DTO 困境

.net - 为什么编译器认为这是一个 Object 而不是 DataRow?

.net - Keys.Control/Shift 和 Keys.ControlKey/ShiftKey 之间的确切区别是什么?

c# - 图像 X 和 Y 分辨率不应该与 DPI 匹配吗?

c# - 如何在 C# 中制作选择工具

c# - LINQ groupby 到 List<List<object>>

c# - 应用程序见解 - 没有 'process cpu' 的数据

javascript - C# 对象到 Javascript 对象