为什么会卡死呢

number321 2008-06-04 12:01:31
public Form1()
{
this.Paint += new PaintEventHandler(f1_Paint);
}

private void f1_Paint(object sender, PaintEventArgs e)
{
Graphics g = e.Graphics;
Random r = new Random();
int m;

while (true)
{
m = r.Next(4);
switch (m.ToString(""))
{
case "3": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 30, 200, 35, 200); break;
case "2": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 60, 200, 65, 200); break;
case "1": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 90, 200, 95, 200); break;
case "0": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 120, 200, 125, 200); break;
default: g.DrawLine(new Pen(Color.CornflowerBlue, 8), 120, 200, 125, 200); break;
// default: break;
}
System.Threading.Thread.Sleep(1000);
}
}

为什么运行起来会卡死................不是sleep了吗


...全文
120 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
mjjzg 2008-06-05
  • 打赏
  • 举报
回复
你的while一直在运行啊
fuadam 2008-06-05
  • 打赏
  • 举报
回复
把你这个方法放到Form_Load事件里看看
number321 2008-06-05
  • 打赏
  • 举报
回复
其实我只是想在窗体中绘图,网上看了是用PaintEventArgs

不过不知道怎么对应graphic和我要绘制的窗体呢
fuadam 2008-06-04
  • 打赏
  • 举报
回复
你的break只是退出了switch,而不是while。用goto跳出来就行了
ericzhangbo1982111 2008-06-04
  • 打赏
  • 举报
回复
程序是一个死循环

你的while没有退出
所以程序不停的划线和休眠
所以死掉
bool exit=true;
while (exit)
{
m = r.Next(4);
switch (m.ToString(""))
{
case "3": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 30, 200, 35, 200); break;
case "2": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 60, 200, 65, 200); break;
case "1": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 90, 200, 95, 200); break;
case "0": g.DrawLine(new Pen(Color.CornflowerBlue, 8), 120, 200, 125, 200); break;
default: g.DrawLine(new Pen(Color.CornflowerBlue, 8), 120, 200, 125, 200); break;
// default: break;
}
System.Threading.Thread.Sleep(1000);
exit=false;
}
frankworld 2008-06-04
  • 打赏
  • 举报
回复
在重绘事件里Sleep,lz是天才

不管你怎么做,重绘不结束,程序就不会有响应
佛的光辉 2008-06-04
  • 打赏
  • 举报
回复
你这个窗体卡死是正常的啊,sleep只是让窗体所在的线程进入休眠一段时间啊,应该调用Application.DoEvents来处理消息队列
bbyangbo 2008-06-04
  • 打赏
  • 举报
回复
不能用sleep,我曾经干过这样的傻事,执行sleep的时候是卡起的
puzzlesky 2008-06-04
  • 打赏
  • 举报
回复
up
number321 2008-06-04
  • 打赏
  • 举报
回复
好像是sleep的时候也是卡住的状态...
ws_hgo 2008-06-04
  • 打赏
  • 举报
回复
UP
麦田之兔 2008-06-04
  • 打赏
  • 举报
回复
看大家说的,呵呵
不只是死循环的问题,如果是的话把sleep换成DoEvents就可以了
而且还是窗体刷新事件的子过程
卧_槽 2008-06-04
  • 打赏
  • 举报
回复
死循环而已。
fuadam 2008-06-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 lujiaxing2007 的回复:]
如果你不想让它卡死,
请让这段代码在另一个线程中运行!!!
[/Quote]

楼上说的有理,窗体的UI线程就是在不停的刷新,你自己又在刷新
lujiaxing2007 2008-06-04
  • 打赏
  • 举报
回复
如果你不想让它卡死,
请让这段代码在另一个线程中运行!!!
fuadam 2008-06-04
  • 打赏
  • 举报
回复
一运行就死了?
number321 2008-06-04
  • 打赏
  • 举报
回复
我是在让它无限循环啊,为了不至于一直执行语句造成卡死的状态

加了sleep,每次循环都有1秒的休息时间,应该就不会卡死了啊.....

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧