首页 新闻 会员 周边

大哥大姐求帮助:C#中如何使Timer中的事件立即停止

0
[已关闭问题] 关闭于 2011-03-17 12:44

实现的功能:有“开始”和“停止”两个按钮,点“开始”,立即执行事件;点“停止”则立即停止。

private void timer3_Tick(object sender, EventArgs e)
{
  Thread threadMonitor = (new Thread(new ThreadStart(Monitor)));
  threadMonitor.Start();
}

 public void Monitor()
 {  
  string mystring = "hello!";
  for (int i = 0; i < mystring.Length; i )
  {
  MessageBox.Show(mystring[i].ToString());
  }
 }

  private void 开始_Click(object sender, EventArgs e) //点击可立即开始
 {
  timer3_Tick(null,null);
  timer3.enabled=true;
 }

 private void 结束_Click(object sender, EventArgs e) //本次事件完成后才结束
 {
  timer3.enabled=false;
 }

点“结束”按钮如何立即结束?只是举个例子。
关键是如何结束很多个之前启动并且没有跑完的线程
代码该如何修改呢?求帮助,小弟这厢有礼了

niesen111的主页 niesen111 | 初学一级 | 园豆:0
提问于:2011-03-02 12:18
< >
分享
所有回答(2)
0

在线程Monitor函数中判断 timer3.enabled的值,如果已经准备结束,线程完成就行了

2012 | 园豆:21230 (高人七级) | 2011-03-02 12:47
public partial class Form1 : Form
{
static public bool flag;
public Form1()
{
InitializeComponent();
}

static public void Monitor()
{
string mystring = "hello!";
for (int i = 0; i < mystring.Length; i )
{
if (flag == false)
break;
else
{
MessageBox.Show(mystring[i].ToString());
}
}
}
private void button1_Click(object sender, EventArgs e)
{
timer1_Tick(null,null);
timer1.Enabled = true;
flag = true;
}

private void button2_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
flag = false;
}

private void timer1_Tick(object sender, EventArgs e)
{
Thread threadMonitor = (new Thread(new ThreadStart(Monitor)));
threadMonitor.Start();
}
}
支持(0) 反对(0) niesen111 | 园豆:0 (初学一级) | 2011-03-05 15:56
为标题解决,谢谢提醒
......
支持(0) 反对(0) niesen111 | 园豆:0 (初学一级) | 2011-03-05 15:57
0

这个简单,在每次的Timer_Tick()事件中

1 Timer.Stop();

2 执行你要完成的步骤

3 Timer.Start();

这样就不会当前的 2 步骤没有完成,又开始了新的Timer_Tick方法了,这个是Timer的标准用法了

xiao_p | 园豆:608 (小虾三级) | 2011-03-02 16:50
又看了下代码,发现楼主好像和我有同样的问题,那就是Timer本身就是异步的了,然后还起个线程去执行任务,你大可直接执行线程中的方法,而不用在起线程了。
支持(0) 反对(0) xiao_p | 园豆:608 (小虾三级) | 2011-03-02 16:54
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册