比較的単純な Windows アプリケーションがあります。約 15 のコントロールを使用します。
私のコンストラクターメソッドは次のようになります。
public Form1()
{
InitializeComponent();
this.Paint += this.Teken;
}
私の Teken メソッド (簡略化) は次のようになります。
private void Teken(object o, PaintEventArgs pea)
{
if (start)
{
if (comboBox1.Text == "Basic")
Bitmaps.DrawBitmap1(pea.Graphics, bitmapsize, max);
}
}
私の DrawBitmap1 メソッドは、すべてのピクセルに特定の色を設定し、Graphics.DrawImage メソッドを使用してビットマップを描画します。
ビットマップが描画された後、コントロールが非常に遅くなり、テキスト ボックス内のテキストを選択するのに 1 秒以上かかります。メインフォームは本当に遅くなります。
ビットマップがゆっくり描画されることは理解できますが、これは理解できません。
私の問題に対する簡単な解決策はありますか?
編集:
Drawbitmap1 コードは次のとおりです。
public static void DrawBitmap1(Graphics gr, int bitmapsize, int max)
{
Bitmap bitmap1 = new Bitmap(bitmapsize, bitmapsize);
for (int x = 1; x < bitmapsize; x++)
{
for (int y = 1; y < bitmapsize; y++)
{
int mandelnumber = CalculateMandel(x,y)
if (Form1.mandelnumber == max)
bitmap1.SetPixel(x, y, Color.Black);
else if (Form1.mandelnumber %2 == 0)
bitmap1.SetPixel(x, y, Color.White);
else
bitmap1.SetPixel(x, y, Color.Black);
}
}
gr.DrawImage(bitmap1, 50, 100);
}
mandelnumber は、プログラムの別の部分で計算される変数です。
EDIT2:
プロファイラーを実行しましたが、ビットマップのすべてのピクセルを通過した後も CalculateMandel() メソッドの実行が停止しないようです。これはどのように可能ですか?
EDIT3:
テキストボックスまたはボタンにカーソルを合わせると、DrawBitmap1 関数が再度呼び出されることが判明しました。どうすればこれが可能になるのですか?ホバーイベントはなく、TextChangedイベントもありません..