关于timer的问题

吴法吴天 2010-11-17 09:47:04
关于timer的疑问,在timer的Elapsed事件中new了一窗体,这个窗体显示后总是显示繁忙,如果改用委托的话,就不会了。这个是为什么?timer 不就是另开了一个线程吗,为什么会出现卡的情况?
...全文
152 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zerodegrees 2010-11-18
  • 打赏
  • 举报
回复
好像委托是单次执行的
吴法吴天 2010-11-18
  • 打赏
  • 举报
回复
委托里执行的方法就是中间注释掉的那段代码。
吴法吴天 2010-11-18
  • 打赏
  • 举报
回复
什么意思啊,能说清楚点吗
龍月 2010-11-17
  • 打赏
  • 举报
回复
其实Timer控件的原理就是利用了线程,首先设置一个 tick ,也就是没过多少毫秒执行一次 Timer 事件。至于Timer事件就是你想要做的事了。
吴法吴天 2010-11-17
  • 打赏
  • 举报
回复
void alarmTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{

alarmTimer.Enabled = false;

//foreach (DataRow dr in NotesDt.Rows)
//{
// try
// {
// if (dr["IsAlarm"].ToString().Equals("提醒") && dr["NoteTime"].ToString().Equals(DateTime.Now.ToString()))// (int)(DateTime.Parse(dr["NoteTime"].ToString()).Ticks - DateTime.Now.Ticks) < 2)
// {
// if (myAlarmForm == null || !myAlarmForm.IsHandleCreated)
// {
// myAlarmForm = new AlarmForm();
// }
// myAlarmForm.Activate();
// myAlarmForm.changNote(dr["NoteText"].ToString());
// myAlarmForm.Show();
// myAlarmForm.Refresh();
// myAlarmForm.MoveForm();

// }
// }
// catch
// { }
//}
this.Invoke(myShowNote);
alarmTimer.Enabled = true;
}
代码就是这样了
guyoujing 2010-11-17
  • 打赏
  • 举报
回复
不会。。留个标记。。
HostMark 2010-11-17
  • 打赏
  • 举报
回复
mark 一下。等答案。。
吴法吴天 2010-11-17
  • 打赏
  • 举报
回复
大哥们,代码在家里,晚上贴哈。
烈火蜓蜻 2010-11-17
  • 打赏
  • 举报
回复
你的代码有问题吧,贴出来
吴法吴天 2010-11-17
  • 打赏
  • 举报
回复
恩,这个我知道。我的意思是:在timer中每过3秒显示一个窗体,窗体是显示了,但是窗体中的按钮都用不了;但是把显示窗体的代码放到委托中,窗体的按钮就可以用了。用的this.invoke(委托);我的意思是,timer就是另开了一个线程啊,而委托也是委托给timer线程。为什么委托就能实现效果了呢

111,129

社区成员

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

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

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