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

 更新时间:2014年10月22日 09:06:26   投稿:shichen2014  
这篇文章主要介绍了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#程序设计有所帮助。

相关文章

  • C#读取XML的CDATA节点内容实例详解

    C#读取XML的CDATA节点内容实例详解

    在本篇文章里小编给大家整理了关于C# 读取XML的CDATA节点内容的相关知识点内容,有需要的朋友们参考学习下。
    2019-09-09
  • c#结构和类的相关介绍

    c#结构和类的相关介绍

    结构和类的共同点都是属于抽象数据类型,包含数据和数据的操作。不同点在于结构偏重于数据语意,而类偏重於行为语意。
    2012-12-12
  • C#实现跑马灯效果的示例代码

    C#实现跑马灯效果的示例代码

    跑马灯效果,功能效果大家应该都知道,就是当我们的文字过长,整个页面放不下的时候(一般用于公告等),可以让它自动实现来回滚动。本文将利用C#实现这一效果,感兴趣的可以了解一下
    2022-11-11
  • winform简单缓存类实例

    winform简单缓存类实例

    这篇文章主要介绍了winform简单缓存类,涉及C#缓存使用技巧,非常简单实用,需要的朋友可以参考下
    2015-09-09
  • Unity3D实现分页系统

    Unity3D实现分页系统

    这篇文章主要为大家详细介绍了Unity3D实现分页系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-04-04
  • C#集合之不变集合的用法

    C#集合之不变集合的用法

    这篇文章介绍了C#集合之不变集合的用法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • WPF实现图片合成或加水印的方法【2种方法】

    WPF实现图片合成或加水印的方法【2种方法】

    这篇文章主要介绍了WPF实现图片合成或加水印的方法,结合实例形式分析了2种比较实用的WPF图片操作相关技巧,需要的朋友可以参考下
    2017-03-03
  • C#实现FTP文件下载及超时控制详解

    C#实现FTP文件下载及超时控制详解

    这篇文章主要为大家详细介绍了C#实现FTP文件下载及超时控制的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-03-03
  • C#实现流程图设计器

    C#实现流程图设计器

    这篇文章主要介绍了C#实现流程图设计器,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • C#使用opencv截取旋转矩形区域图像的实现示例

    C#使用opencv截取旋转矩形区域图像的实现示例

    这篇文章主要介绍了C#使用opencv截取旋转矩形区域图像,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-03-03

最新评论