私はサードパーティのコントロール (ComponentOne) を使用していますが、断続的に、この典型的な画像が示すような典型的な赤い X ボックスが表示されます。最初は GDI リークがあると思ったので、いくつかの作業を行った後、コントロールを描画するときに GDI 番号が正常であることを確認しました。
グーグルで調べたところ、OnPaint() イベントでこの種のエラーが発生することがわかりました。そのため、コントロールを Render に呼び出すときに try and 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 がフリーズしますか? または、例外の原因が何であれなくなり、2 番目のコントロールが再描画され、正常にレンダリングされると思いますか?