Smobiler上海石磨_.NET移动开发平台

标题: Smobiler如何使用Timer? [打印本页]

作者: Lincy.Lin    时间: 2016-7-14 14:49
标题: Smobiler如何使用Timer?
通过引发 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();
复制代码








作者: Csharp    时间: 2016-7-14 17:28
Smobiler.Core.ManagedThreading.MobileManagedThreadBase.SetTimerThreadManaged(this.Client.SessionID);

上边这段代码起什么作用? 也是密须的么?
作者: Lincy.Lin    时间: 2016-7-15 09:09
Csharp 发表于 2016-7-14 17:28
Smobiler.Core.ManagedThreading.MobileManagedThreadBase.SetTimerThreadManaged(this.Client.SessionID) ...

这段代码用于向Timer的执行线程中注册当前Client的会话,是必须的
作者: Obsidian    时间: 2019-11-1 13:53
您好 等于说实际需要定时的代码仅仅是
this.Label1.Text = DateTime.Now.ToString("HH24:mm:ss");
这样吗?
如果是这样的话,我测试的时候想toast一句话证明定时器工作正常,却没有反应是为什么呢?
如果不是的话是我哪里理解出了问题?




欢迎光临 Smobiler上海石磨_.NET移动开发平台 (https://www.smobiler.com/) Powered by Discuz! X3.2