C# Button点击事件里的计时器

Flandre 2014-11-03 11:56:21
C# WinForm,button1和button2,button1点击事件里有个10秒后执行的计时器,另外开了个线程顺序响应button1和button2点击事件,button1.PerformClick();Thread.Sleep(500);button2.PerformClick();程序执行的顺序是button1,500ms后button2,10s后button1里的计时器事件
我现在想要这样的效果,当button1里10s后的计时器执行完之后再去响应button2,线程里的Thread.Sleep(500);不变,请问应该怎么做?我不想把线程里Thread.Sleep(500)改成10000,想请教这之外的方法,谢谢
...全文
506 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2014-11-03
  • 打赏
  • 举报
回复
最好在执行的方法中加上锁保证方法的独占性,这样才能btn1和btn2交替执行
  • 打赏
  • 举报
回复
你可以随便找一本真正的描述多任务、大系统开发的入门书,例如一个真正的游戏框架设计的书,你会发现,他们基本上都会首先强调“系统全局的定时驱动”,不会告诉你成百上千的活物各自搞什么定时器、甚至坑爹的“子线程+Sleep”的。如果不了解这个原则,就不要考虑设计一个正规产品了,就算是开发只有20分之一规模的程序也不能乱设计。
  • 打赏
  • 举报
回复
你可以定义一个自己的控制Session类型
public class TaskSession
{
    public DateTime 开始时间;
    public Action 程序;
}
然后定义一个集合用于保存所有任务
public static List<TaskSession> tasks = new List<TaskSession>();
然后可以使用“定时器”——每帧500毫秒——来执行这些任务,执行完毕就从tasks中删除掉。执行具体的某个任务时可以临时使用子线程。 不要滥用定时器,更不应该滥用线程,更更不能在线程中乱写 Sleep。
於黾 2014-11-03
  • 打赏
  • 举报
回复
另外,已经使用了timer,又用线程,到底是想要闹哪样 就不能用正规的编程思路解决问题,非要自己弄个奇葩的"执行顺序"吗
於黾 2014-11-03
  • 打赏
  • 举报
回复
button1.PerformClick() 不要胡乱用这种用法 不敢把按钮事件里的代码封装成函数,哪里想调用就调函数吗 不要直接去调用事件
gxingmin 2014-11-03
  • 打赏
  • 举报
回复
引用 1 楼 gxingmin 的回复:
在button2的click事件第一行加上 Thread.Sleep(1500)
哦,应该是 Thread.Sleep(9500)
gxingmin 2014-11-03
  • 打赏
  • 举报
回复
在button2的click事件第一行加上 Thread.Sleep(1500)

110,537

社区成员

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

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

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