国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > C# > 正文

Winform基于多線程實(shí)現(xiàn)每隔1分鐘執(zhí)行一段代碼

2019-10-29 21:42:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Winform基于多線程實(shí)現(xiàn)每隔1分鐘執(zhí)行一段代碼的方法,設(shè)計(jì)線程的操作及時(shí)間函數(shù)的用法,需要的朋友可以參考下
 

本文實(shí)例講述了Winform基于多線程實(shí)現(xiàn)每隔1分鐘執(zhí)行一段代碼的方法,分享給大家供大家參考。具體實(shí)現(xiàn)方法如下:

1.定義相關(guān)的類Timer.cs,代碼如下:

 

復(fù)制代碼代碼如下:
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.在主線程部分引用此類。在需要執(zhí)行的event加入:

 

復(fù)制代碼代碼如下:
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(() => 加入需要執(zhí)行的event));
            //to do 
        }

private void Form1_FormClosed(object sender, FormClosedEventArgs e)

{

//記得需要結(jié)束

if (_Timer != null)

{

_Timer.OnElapsed -= Timer_OnElapsed;

_Timer.Stop();

}

}

 

希望本文所述對(duì)大家的C#程序設(shè)計(jì)有所幫助。


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 东乌| 乐山市| 大洼县| 永嘉县| 宁远县| 马山县| 石景山区| 岱山县| 伊川县| 峡江县| 安塞县| 保定市| 旬邑县| 青州市| 河津市| 湘阴县| 阜新市| 和静县| 烟台市| 哈密市| 五原县| 汝南县| 平乐县| 宾阳县| 隆回县| 余姚市| 乾安县| 阿荣旗| 闸北区| 大丰市| 太仆寺旗| 无为县| 娄烦县| 格尔木市| 眉山市| 杂多县| 嘉黎县| 棋牌| 游戏| 资兴市| 海门市|