我定义了一个线程,目的是使用Thread.Sleep(int n)这个功能,然后就可以模仿直线的缓慢加长,程序如下:
private void button10_Click(object sender, EventArgs e) //加工焰道
{
ThreadProcSafe();
this.demoThread.Start();
} private void ThreadProcSafe()
{
SetText(20);
} private void SetText(float NoNumber)
{
if (this.pictureBox1.InvokeRequired) //控件的 Handle 是在与调用线程不同的线程上创建的
{ //(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false
SetTextCallback newInvoke = new SetTextCallback(SetText); //产生delegate对象
this.Invoke(newInvoke, new Object[] { NoNumber }); //调用
}
else
{
pictureBox1.Image = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
Graphics g = Graphics.FromImage(pictureBox1.Image);
g.Clear(SystemColors.ControlLightLight);
Pen pen = new Pen(Color.Red,3);
for (int i = 0; i < 5; i++)
{
iCount = 0; [color=#FF0000]while (iCount < 120)
{
Thread.Sleep(100);
this.textBox1.Text = iCount.ToString();
g.DrawLine(pen, 20, 20, 50 + iCount, 50 + iCount);
iCount += 1;
pictureBox1.Refresh();
} [/color]
}
g.Dispose();
}
}
红色部分的循环执行一次就不能继续下去了,程序进入死循环,不能正常关闭程序,后来我改了一点:
for (int i = 0; i < 5; i++)
{
iCount = 0; [color=#FF0000]while (iCount < 120)
{
Thread.Sleep(100);
this.textBox1.Text = iCount.ToString();
[color=#FF00FF]g.DrawLine(pen, i*10+20, i*10+30, 50 + iCount, 50 + iCount);
iCount += 1;
pictureBox1.Refresh();
} [/color] [/color]
目的是有不同的起点。
但是这样的话直线并不是一条一条的显示,而是像区域一样,缓慢加大,然后有进入死循环了
这个问题好烦,我写了这么多,希望高手帮忙看看,给点意见,谢谢!
private void button10_Click(object sender, EventArgs e) //加工焰道
{
ThreadProcSafe();
this.demoThread.Start();
} private void ThreadProcSafe()
{
SetText(20);
} private void SetText(float NoNumber)
{
if (this.pictureBox1.InvokeRequired) //控件的 Handle 是在与调用线程不同的线程上创建的
{ //(说明您必须通过 Invoke 方法对控件进行调用),则为 true;否则为 false
SetTextCallback newInvoke = new SetTextCallback(SetText); //产生delegate对象
this.Invoke(newInvoke, new Object[] { NoNumber }); //调用
}
else
{
pictureBox1.Image = new Bitmap(pictureBox1.ClientSize.Width, pictureBox1.ClientSize.Height);
Graphics g = Graphics.FromImage(pictureBox1.Image);
g.Clear(SystemColors.ControlLightLight);
Pen pen = new Pen(Color.Red,3);
for (int i = 0; i < 5; i++)
{
iCount = 0; [color=#FF0000]while (iCount < 120)
{
Thread.Sleep(100);
this.textBox1.Text = iCount.ToString();
g.DrawLine(pen, 20, 20, 50 + iCount, 50 + iCount);
iCount += 1;
pictureBox1.Refresh();
} [/color]
}
g.Dispose();
}
}
红色部分的循环执行一次就不能继续下去了,程序进入死循环,不能正常关闭程序,后来我改了一点:
for (int i = 0; i < 5; i++)
{
iCount = 0; [color=#FF0000]while (iCount < 120)
{
Thread.Sleep(100);
this.textBox1.Text = iCount.ToString();
[color=#FF00FF]g.DrawLine(pen, i*10+20, i*10+30, 50 + iCount, 50 + iCount);
iCount += 1;
pictureBox1.Refresh();
} [/color] [/color]
目的是有不同的起点。
但是这样的话直线并不是一条一条的显示,而是像区域一样,缓慢加大,然后有进入死循环了
这个问题好烦,我写了这么多,希望高手帮忙看看,给点意见,谢谢!
这个线程在做什么啊!
先帮你顶哈!
(2)你iCount++ 后,你的斜率变了,所以说不是一条直线慢慢往前画,而是画出了一片线段(不知这么说你明白没有)
而i从0到5的象素变化你就看不出来了.
补充一点,我上面程序的意思是循环画5条直线就可以了,但是程序的执行是连续做了两次循环,画完5条线后,又重新再画一次,想不明白?