线程中重新启动Timer的问题

sickinsect 2004-11-03 01:25:59
Timer Tick的时候启动一线程,同时需要线程完成后执行一些操作

private void tmTimer_Tick(object sender, System.EventArgs e)
{
tmTimer.Stop();
Thread t = new Thread(new ThreadStart(worker));
t.Start();
t.Join();
tmTimer.Enabled = true;
//do something ...
}

private void worker()
{
//do some work...
}

这种情况执行没问题,但主线程会阻塞,因此加入一控制线程:

private void tmTimer_Tick(object sender, System.EventArgs e)
{
Thread t = new Thread(new ThreadStart(controller));
t.Start();
}

private void controller()
{
tmTimer.Stop();
Thread t = new Thread(new ThreadStart(worker));
t.Start();
t.Join();
tmTimer.Enabled = true;
//do something ...
}

private void worker()
{
//do some work...
}

这样的话,发现Timer第一次Tick以后,正常执行controller和worker,然后Timer就再没有动静了,难道线程中不能控制Timer?但是线程中更改其他控件如Label都没问题啊?
...全文
127 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
ffb 2004-11-12
  • 打赏
  • 举报
回复
我也有这个问题
sickinsect 2004-11-03
  • 打赏
  • 举报
回复
自己解决了一半,换用System.Timers.Timer搞定,但是没有直接解决。
找了下资料,对于textbox之类的可以用invoke,但Timer类没有实现ISynchronizeInvoke?
xiaoslong 2004-11-03
  • 打赏
  • 举报
回复
帮你顶一下
sickinsect 2004-11-03
  • 打赏
  • 举报
回复
补充一下,因为worker执行时间难以确定,必须要停止Timer,完成后再启动。然后当然就是不能使主线程停止响应,如何解决,谢谢!

110,534

社区成员

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

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

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