C# 例如,当我用线连接14个点并尝试移动它们时,移动速度非常慢,什么';他怎么会走得那么慢?
这是绘画活动:C# 例如,当我用线连接14个点并尝试移动它们时,移动速度非常慢,什么';他怎么会走得那么慢?,c#,C#,这是绘画活动: private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e) { SolidBrush brush; Pen p=null; Point connectionPointStart; Point connectionPointEnd; Graphi
private void pictureBox1_Paint(object sender, System.Windows.Forms.PaintEventArgs e)
{
SolidBrush brush;
Pen p=null;
Point connectionPointStart;
Point connectionPointEnd;
Graphics g = e.Graphics;
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.AntiAlias;
brush = new SolidBrush(Color.Red);
p = new Pen(brush);
for (int idx = 0; idx < wireObject1._point_X.Count; ++idx)
{
Point dPoint = new Point((int)wireObject1._point_X[idx], (int)wireObject1._point_Y[idx]);
dPoint.X = dPoint.X - 5; // was - 2
dPoint.Y = dPoint.Y - 5; // was - 2
Rectangle rect = new Rectangle(dPoint, new Size(10, 10));
g.FillEllipse(brush, rect);
}
for (int i = 0; i < wireObject1._connectionstart.Count; i++)
{
int startIndex = wireObject1._connectionstart[i];
int endIndex = wireObject1._connectionend[i];
connectionPointStart = new Point((int)wireObject1._point_X[startIndex], (int)wireObject1._point_Y[startIndex]);
connectionPointEnd = new Point((int)wireObject1._point_X[endIndex], (int)wireObject1._point_Y[endIndex]);
p.Width = 4;
g.DrawLine(p, connectionPointStart, connectionPointEnd);
moveCounter++;
textBox1.Text = moveCounter.ToString();
}
}
timer2是我添加的另一个计时器,只是为了看看它在5秒内移动了多少次。所以,如果计时器1设置为30毫秒,我会在5秒后看到大约150个移动
所以在timer1滴答事件中,我做了:
private void timer1_Tick(object sender, EventArgs e)
{
if (refreshFlag == true)
{
pictureBox1.Refresh();
refreshFlag = false;
}
}
我确信定时器的想法应该能解决这个问题,但它没有。所以我想知道问题出在哪里,也许我在绘画比赛中对循环做了一些错误的事情
列表连接开始包含索引,例如,如果我有两个点与一行连接,我单击一个点并拖动该点,使该行变长或变短,则列表连接开始包含索引,例如,我有一个包含索引0的位置/单元格[0]
例如,在列表_point_X中,[0]120.0和[1]180.0中放置了两个单元格,这两个单元格的点坐标与_point_Y列表的点坐标相同
现在的问题是问题出在哪里?油漆事件中的错误?跟搬家事件有关吗?我不明白为什么它会变得如此缓慢,当它有9-10个点与它们之间的许多线连接
例如,我现在用两个点连接一条线进行测试,我移动了一个点,将线拉长或拉短,5秒后结果是160次移动,然后再5秒后是323次,依此类推。所以它似乎在运行计时器1和30毫秒,或者我错了?首先,对应用程序进行一些调整: 您是否尝试运行与绘图分离的逻辑?=>例如,“updateData()”方法和“draw()”方法?此外,我建议使用 第二,如果对于较大的数据集(当您添加更多点时)性能不佳,则您的算法效率不够。如果要绘制多边形,请首先更新顶点坐标,然后调用
private void timer1_Tick(object sender, EventArgs e)
{
if (refreshFlag == true)
{
pictureBox1.Refresh();
refreshFlag = false;
}
}