我正在使用第 3 方控件 (ComponentOne),并且间歇性地我会得到这个典型的红色 X 框,例如这个典型的图像所示。起初我以为我有 GDI 泄漏,所以在做了一些腿部工作后,我在绘制控件时验证了我的 GDI 编号是正常的。
在谷歌搜索之后,我发现这种错误发生在 OnPaint() 事件上,因此即使我在调用控件到渲染时尝试并捕获,它也不会捕获它。
所以我的下一步是在我的代码中进行以下覆盖。
protected override void OnPaint(PaintEventArgs e)
{
try
{
base.OnPaint(e);
}
catch (Exception ex)
{
this.Invalidate(); //attempt to redraw the control
XmSam.Log(ex);
}
}
我认为这应该可以解决问题,但我不能一直重现这个问题,所以我还不能完全测试上面的代码。我的问题是,如果我呈现我的控件并且它有异常,那么这段代码将尝试重绘控件。这会陷入无限循环并冻结我的用户界面吗?还是您认为导致异常的任何原因都会消失,并且在第二次重绘控件时它应该呈现正常?