当前位置: 首页 > 编程笔记 >

Winform基于多线程实现每隔1分钟执行一段代码

蒋茂
2023-03-14
本文向大家介绍Winform基于多线程实现每隔1分钟执行一段代码,包括了Winform基于多线程实现每隔1分钟执行一段代码的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了Winform基于多线程实现每隔1分钟执行一段代码的方法,分享给大家供大家参考。具体实现方法如下:

1.定义相关的类Timer.cs,代码如下:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading;

namespace SMIS2013.DSS.Monitor {     public class MyTimer     {         public delegate void Elapsed(); //定义委托          public event Elapsed OnElapsed;

        private long _Interval = 1000;         public long Interval         {             get { return _Interval; }             set { _Interval = value; }         }

        private bool _IsStart = false;         private Thread _TimerThread;         public void Start()         {             if (_IsStart)                 return;

            _IsStart = true;

            _TimerThread = new Thread(new ThreadStart(DoTimer));             _TimerThread.Start();         }

        public void Stop()         {             try             {                 if (!_IsStart)                     return;

                _IsStart = false;

                _TimerThread.Abort();             }             catch (Exception e)             { }         }

        private void DoTimer()         {             try             {                 int last = Environment.TickCount;                 while (_IsStart)                 {                     if (Environment.TickCount - last > _Interval)                     {                         if (OnElapsed != null)                             OnElapsed();

                        last = Environment.TickCount;                                            }                     Thread.Sleep(100);                 }

            }             catch (Exception e)             { }         }

    } }

2.在主线程部分引用此类。在需要执行的event加入:

private const int _Interval =40000;

        private MyTimer _Timer;

  private void Form1_Load(object sender, EventArgs e)         {

            _Timer = new MyTimer();             _Timer.Interval = _Interval;             _Timer.Start(); //开始             _Timer.OnElapsed += Timer_OnElapsed;         }  void Timer_OnElapsed()         {             Invoke(new Action(() => 加入需要执行的event));             //to do         }

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

//记得需要结束

if (_Timer != null)

{

_Timer.OnElapsed -= Timer_OnElapsed;

_Timer.Stop();

}

}

希望本文所述对大家的C#程序设计有所帮助。

 类似资料:
  • 问题内容: 我正在cronjob中运行PHP脚本,我想每5分钟发送一封电子邮件 我当前的(crontab)cronjob: cronmail.php如下: 但是我没有在30分钟内收到此配置的电子邮件。 问题答案: 在文件中,这些字段是: 每小时的分钟。 一天中的小时。 一个月中的某天。 一年中的月份。 一周中的天。 所以: 表示每小时10分钟执行一次。 如果您希望每五分钟使用一次,请使用以下任一方

  • 问题内容: 如何每分钟运行一个函数?在JavaScript中,我可以做类似的事情,在Swift中是否存在类似的事情? 想要的输出: 你好世界每分钟一次… 问题答案: 记住要导入基金会。 斯威夫特4:

  • 问题内容: 我正在使用Python和PyGTK。我对运行某个功能感兴趣,该功能每隔几分钟从串行端口获取数据并保存一次。 当前,我正在时间库中使用sleep()函数。为了能够进行处理,我将系统设置如下: 这种设置使我从串口读取数据的间隔为5分钟。我的问题是我希望能够让我的readserial()函数每隔5分钟暂停一次,并且能够一直执行操作,而不是使用time.sleep()函数。 关于如何解决这个问

  • 我有一个进程,每分钟发送SQS消息。消息每分钟发出一次是很重要的,所以我计划在多个实例上运行这个过程,这样它就更容错了。 即使它在多个实例上运行,我也只希望SQS消息每分钟发出一次。所以如果机器A发送消息,我不希望机器B发送它们,反之亦然。 我想避免有一个主/从设置。 我曾想过使用一个单独的SQS队列来发送一条完成的消息,该消息可以由其中一个进程接收,以开始发送消息,并在完成时/一分钟后发送一条完

  • 本文向大家介绍基于C++实现的线程休眠代码,包括了基于C++实现的线程休眠代码的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了基于C++实现的线程休眠代码,分享给大家供大家参考。具体方法如下: linux平台示例如下: 编译代码如下: boost库实现示例如下: 编译命令如下: 希望本文所述对大家的C++程序设计有所帮助。

  • 问题内容: 我想尝试通过以下方式使用@Schedule批注: 根据日志,CronService运行良好,但是计划的任务“ runsEveryMinute”不起作用。 使用EJB计划任务如何工作? 问题答案: 按照该Javadoc中的注释,默认值是: 除小时,分钟和秒外的所有字段;和 默认情况下为小时,分钟和秒。 通过将小时值保留为默认值,它要求计时器在午夜之后每分钟运行一小时(即00:00、00: