Brushが必要になったので作った。
Brush brush = new SolidBrush(color);
ところが、colorはシステムカラーである場合が多いことに気がついた。
SystemColorsの説明には、「パフォーマンスを向上させるには、SystemColorsの値を使用して新しいブラシを作成するのではなく、SystemBrushesクラスのプロパティを使用します」
とある。
そこで、こうした。
Brush brush = null;
if( color.IsSystemColor )
{
brush = SystemBrushes.FromSystemColor(color);
}
else
{
brush = new SolidBrush(color);
}
Brushは使い終わったらDisposeせねばならん。
そこで、こうした。
Brush CreateOptimizedBrush(Color color)
{
Brush brush = null;
if( color.IsSystemColor )
{
brush = SystemBrushes.FromSystemColor(color);
}
else
{
brush = new SolidBrush(color);
}
return brush;
}
using( Brush brush = CreateOptimizedBrush(color))
{
// brushを使って描画する
}
そしたら死んだ。
原因は確かめられなかったが、おそらく、システムブラシをDisposeしようとしたためであろう。
Win32 APIでは、GetStockObjectで取得したブラシをDeleteObjectしても大丈夫と保証されていたが…お粗末なものよ。
こういうケース、どうしたらうまくできる?