Winform基於多線程完成每隔1分鐘履行一段代碼。本站提示廣大學習愛好者:(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#法式設計有所贊助。