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

首頁 > 編程 > C# > 正文

Winform基于多線程實現每隔1分鐘執行一段代碼

2020-01-24 02:20:46
字體:
來源:轉載
供稿:網友

本文實例講述了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#程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆林| 和政县| 南京市| 鄂温| 嘉善县| 黄龙县| 海宁市| 海原县| 崇礼县| 湘阴县| 重庆市| 比如县| 福清市| 云和县| 衢州市| 永年县| 彰武县| 阿图什市| 古交市| 乌审旗| 嘉义县| 武陟县| 昭觉县| 雷州市| 桑日县| 五河县| 四子王旗| 六枝特区| 曲阜市| 同德县| 冕宁县| 潼南县| 长乐市| 阳高县| 大邑县| 永清县| 濉溪县| 永泰县| 开鲁县| 疏附县| 濮阳市|