timer,timer,我为你疯狂。。。。

wandingwei 2010-10-14 04:59:59











private void btAuto_1_Click(object sender, EventArgs e)
{
if (btAuto_1.Text == "自动")
{
bt1.Enabled = false;
btAuto_1.Text = "手动";
//自动模拟车辆运行

while (stationNum1 < stationSum1 && btAuto_1.Text == "手动")
{
while (waiting1)
{
Application.DoEvents();
}

if (bt1.Text == "进站")
{
//time1运行时间为40~100秒
waiting1 = true;
Random rd = new Random();
time1 = rd.Next(1, 5);
timer1.Interval = 1000;

timer1.Start();
}
else if (bt1.Text == "出站")
{
//time1滞留时间为5~10秒
waiting1 = true;
Random rd = new Random();
time1 = rd.Next(1, 3);
timer1.Interval = 1000;

timer1.Start();
}

bt1_Click(bt1, e);
}
}
else if (btAuto_1.Text == "手动")
{
timer1.Stop();
btAuto_1.Text = "自动";
bt1.Enabled = true;
waiting1 = false;
}
}

private void timer1_Tick(object sender, EventArgs e)
{
if (time1 >= 0)
{
label_time_1.Text = time1.ToString();
time1--;
}
else
{
timer1.Stop();
waiting1 = false;//设置标记
}
}




之前发个帖子问过这个问题。。
虽然按照方法把问题解决了,不过问题又出现了。。。很是头疼。。。
http://topic.csdn.net/u/20101014/16/7ed4e20b-fd42-4d12-b06d-0531b77a6f7a.html?seed=2037034282&r=69050247#r_69050247

问题是这样的。。。。。
现在有多个按钮,多个timer,每个按钮按下“自动”以后就需要自己来执行,且互不影响,但是现在加了Application.DoEvents();之后,就只有一个timer能正常运行了,请问该如何解决呢。。。
...全文
250 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghost5216 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 wandingwei 的回复:]
C# code


if (bt1.Text == "进站")
{
//time1运行时间为40~100秒
waiting1 = true;
Random ……
[/Quote]
假死是因为你事件没处理完,其他消息是不响应的,所以有你所说的“假死”现象。
不要把你那个while(.............)逻辑放到按钮的事件中去。
你可以单独放到一个方法中比如workSomething();在按钮时间中 new Thread(workSomething).start();
但我不建议你用线程,这还涉及到控制线程的问题。
你还是把workSomething()放到定时器中吧,按钮事件只控制定时器的启动和停止。
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 wuyazhe 的回复:]
发消息给你了,中午休息时间可以帮你调试一下。
[/Quote]

谢谢,真的非常感谢您
兔子-顾问 2010-10-15
  • 打赏
  • 举报
回复
发消息给你了,中午休息时间可以帮你调试一下。
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
郁闷。。。
wandingwei 2010-10-15
  • 打赏
  • 举报
回复


if (bt1.Text == "进站")
{
//time1运行时间为40~100秒
waiting1 = true;
Random rd = new Random();
time1 = rd.Next(1, 5);

t = new Thread(new ThreadStart(thread_test));
t.Start();

while (time1 != 0)
{
Thread.Sleep(1000);
thread_test();
}
t.Suspend();
}



这个这样改了一下,但是运行的时候程序就假死,循环结束的时候就好了,不知道怎么回事儿
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liuqilin1987 的回复:]
Thread thr = new Thread(new ThreadStart(FunctionName))
通过 thr.Start();
thr.Resume();
thr.Suspend();
来控制线程
线程级Timer
System.Thread.Timer
[/Quote]

谢谢,这个我也刚看了,但问题是如何应用到具体的问题中,这个我比较头疼
liuqilin1987 2010-10-15
  • 打赏
  • 举报
回复
Thread thr = new Thread(new ThreadStart(FunctionName))
通过 thr.Start();
thr.Resume();
thr.Suspend();
来控制线程
线程级Timer
System.Thread.Timer
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
真想再加100分。。。。-_-
devin_jia 2010-10-15
  • 打赏
  • 举报
回复
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
愁死我了。。。。
哪位大侠帮帮忙。。。
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
加分了。。加分了。。。
怎么创建了一个线程,没有sleep方法。。。。-_-
HaveOneDream 2010-10-15
  • 打赏
  • 举报
回复
多线程
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 ghost5216 的回复:]
我很理解楼主的处境,但是问题不具体化就不好解决。
只能说痛苦是暂时的,你会挺过去的。
还有只是用用线程,不会那么头痛的。
如果逻辑没有理解清除,即使用了线程也可能会有新的问题产生。

本来按钮单击事件的消息不处理完,应用程序是不会响应其他消息的。但是你用了Application.DoEvents();这样,即使你按钮单击事件的消息没有处理完,其他消息也会处理。这部分看看MSDN。Appl……
[/Quote]

恩,谢谢您的建议
我现在在看线程的东西呢

也知道就是Application.DoEvents的问题

那我是不是应该定义一个方法,然后创建一个进程来调用这个方法,让主进程来等待,直到创建的进程结束之后再恢复主进程??
wandingwei 2010-10-15
  • 打赏
  • 举报
回复
对。。不用贴代码。。
麻烦帮忙把步骤告诉一下 就行,代码我自己来写
>_<
ghost5216 2010-10-15
  • 打赏
  • 举报
回复
我很理解楼主的处境,但是问题不具体化就不好解决。
只能说痛苦是暂时的,你会挺过去的。
还有只是用用线程,不会那么头痛的。
如果逻辑没有理解清除,即使用了线程也可能会有新的问题产生。

本来按钮单击事件的消息不处理完,应用程序是不会响应其他消息的。但是你用了Application.DoEvents();这样,即使你按钮单击事件的消息没有处理完,其他消息也会处理。这部分看看MSDN。Application.DoEvents(),可能是你解决问题的方法,也可能是“病根”。

wandingwei 2010-10-15
  • 打赏
  • 举报
回复
啊。。。帖子地址弄错了。。。。
麻烦能不能先帮我写一下。。。现在看也来不及了。。。。
jason成都 2010-10-14
  • 打赏
  • 举报
回复
呵呵,线程只是用的话没有那么苦恼。学习就知道了。只要在.net里面用就可以了。
wandingwei 2010-10-14
  • 打赏
  • 举报
回复
线程。。。真苦恼。。。
bancxc 2010-10-14
  • 打赏
  • 举报
回复
lxf67833508 2010-10-14
  • 打赏
  • 举报
回复
学习下....
加载更多回复(1)

111,129

社区成员

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

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

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