用户
 找回密码
 立即注册

40

主题

340

帖子

1496

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
1496
发表于 2016-7-14 14:49:51
通过引发 Timer 事件,可以有规律地隔一段时间执行一次代码,案例如下:
ps:1.支持System.Threading.Timer和System.Timers.Timer两种
       2.使用时需注册到MobileManagedTimer和MobileManagedThreadingTimer两个类,否则在使用Timer的时候,会出现提示
         原因是为了防止界面上创建的线程或计时器在界面关闭或客户端连接Session结束后不能合理的释放,所以需要使用托管的线程和计时器,这样在Form关闭时或Client Session Close的时候,可以被系统自动释放。
       3.同时在托管线程和Timer里提供了FormClosed,FormDeactivate,FormActivated,SessionStoped事件,方便在不同的情况下,比如在打开另外一个窗体时,当前窗体的计时器停止,在返回到当前窗体的时候,计时器开始工作的操作


一、VB代码案例:
  1. '调用Timer
  2.         Dim timerobj As New Timers.Timer(10000)
  3.         '需要注册到MobileManagedTimer和MobileManagedThreadingTimer两个类,否则在使用Timer的时候,会出现提示
  4.         Dim mangedTimer As New ManagedThreading.MobileManagedTimer(timerobj, "")
  5.         AddHandler mangedTimer.FormDeactivate, Sub() timerobj.Stop()
  6.         AddHandler mangedTimer.FormActivated, Sub() timerobj.Start()
  7.         AddHandler mangedTimer.SessionStoped, Sub()
  8.                                                   timerobj.Stop()
  9.                                                   timerobj.Close()
  10.                                                   timerobj.Dispose()
  11.                                               End Sub
  12.         AddHandler timerobj.Elapsed, Sub(s, e1)
  13.                                          Try
  14.                                              '赋值
  15.                                              ManagedThreading.MobileManagedThreadBase.SetThreadSession(Me.Client.SessionID)
  16.                                              Me.Label1.Text = DateTime.Now.ToString("HH24:mm:ss")
  17.                                          Catch ex As Exception
  18.                                              MessageBox.Show(ex.Message)
  19.                                          End Try
  20.                                      End Sub
  21.         timerobj.Enabled = True
  22.         timerobj.Start()
复制代码



二、C#代码案例:
  1. //调用Timer
  2.                 System.Timers.Timer timerobj = new System.Timers.Timer(10000);
  3.                 //需要注册到MobileManagedTimer和MobileManagedThreadingTimer两个类,否则在使用Timer的时候,会出现提示
  4.                 Smobiler.Core.ManagedThreading.MobileManagedTimer mangedTimer = new Smobiler.Core.ManagedThreading.MobileManagedTimer(timerobj, "");
  5.                 mangedTimer.FormDeactivate += (obj,args) => timerobj.Stop();
  6.                 mangedTimer.FormActivated += (obj, args) => timerobj.Start();
  7.                 mangedTimer.SessionStoped += (obj, args) =>
  8.                 {
  9.                     timerobj.Stop();
  10.                     timerobj.Close();
  11.                     timerobj.Dispose();
  12.                 };
  13.                 timerobj.Elapsed += (s, e1) =>
  14.                 {
  15.                     try
  16.                     {
  17.                         //赋值
  18.                         Smobiler.Core.ManagedThreading.MobileManagedThreadBase.SetThreadSession(this.Client.SessionID);
  19.                         this.Label1.Text = DateTime.Now.ToString("HH24:mm:ss");
  20.                     }
  21.                     catch (Exception ex)
  22.                     {
  23.                         MessageBox.Show(ex.Message);
  24.                     }
  25.                 };
  26.                 timerobj.Enabled = true;
  27.                 timerobj.Start();
复制代码







使用道具 举报 回复
发表于 2016-7-14 17:28:53
Smobiler.Core.ManagedThreading.MobileManagedThreadBase.SetTimerThreadManaged(this.Client.SessionID);

上边这段代码起什么作用? 也是密须的么?
使用道具 举报 回复 支持 反对
发表于 2016-7-15 09:09:31
Csharp 发表于 2016-7-14 17:28
Smobiler.Core.ManagedThreading.MobileManagedThreadBase.SetTimerThreadManaged(this.Client.SessionID) ...

这段代码用于向Timer的执行线程中注册当前Client的会话,是必须的
使用道具 举报 回复 支持 反对
发表于 2019-11-1 13:53:42
您好 等于说实际需要定时的代码仅仅是
this.Label1.Text = DateTime.Now.ToString("HH24:mm:ss");
这样吗?
如果是这样的话,我测试的时候想toast一句话证明定时器工作正常,却没有反应是为什么呢?
如果不是的话是我哪里理解出了问题?
使用道具 举报 回复 支持 反对
发新帖
您需要登录后才可以回帖 登录 | 立即注册