我有一个相对简单的 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 方法绘制位图。
绘制位图后,控件变得非常滞后,在文本框中选择文本需要一秒钟多的时间。主要形式变得非常缓慢。
我可以理解要慢慢绘制的位图,但我无法理解这一点。
我的问题有简单的解决方案吗?
编辑:
这是 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 是在程序的另一部分计算的变量。
编辑2:
我运行了一个分析器,似乎CalculateMandel() 方法在通过位图的每个像素后并没有停止运行。这怎么可能?
编辑3:
结果当鼠标悬停在文本框或按钮上时,再次调用了 DrawBitmap1 函数。这怎么可能,我没有任何悬停事件,甚至没有 TextChanged 事件..