以下是關於利用線程來定時執行的初步模型
using System;
using System.Data;
using System.Threading;
using System.Windows.Forms;
namespace Win
{
/// <summary>
///每隔30分鐘運行一次
/// </summary>
public class Timer
{
/// <summary>是否正在運行</summary>
public bool bRun;
/// <summary>出錯的最多次數</summary>
public int iCount=10;
public Timer()
{
bRun = false;
//只用於拋出線程
Thread myThread = new Thread(new ThreadStart(RunTimer));
myThread.Start();
}
/// <summary>
/// 檢測時間與等待時間
/// </summary>
private void RunTimer()
{
int curM = Int32.Parse(DateTime.Now.Minute.ToString());
if((curM==0 || curM==30) && !bRun)
{
bRun = true;
Thread thread = new Thread(new ThreadStart(RunMethod));
thread.Start();
}
else
{
if(curM>30)
curM = 60-curM;
else
curM = 30-curM;
MessageBox.Show(curM.ToString());
Thread.Sleep(curM*60*1000);
RunTimer();
}
}
/// <summary>
/// 定時執行的方法
/// </summary>
private void RunMethod()
{
int iRun = 0;
try
{
MessageBox.Show(DateTime.Now.ToString());
bRun = false;
RunTimer();
}
catch
{
if(iRun<iCount) RunMethod();
else MessageBox.Show("系統執行問題");
}
finally
{
iRun++;
}
}
}
}
using System.Data;
using System.Threading;
using System.Windows.Forms;
namespace Win
{
/// <summary>
///每隔30分鐘運行一次
/// </summary>
public class Timer
{
/// <summary>是否正在運行</summary>
public bool bRun;
/// <summary>出錯的最多次數</summary>
public int iCount=10;
public Timer()
{
bRun = false;
//只用於拋出線程
Thread myThread = new Thread(new ThreadStart(RunTimer));
myThread.Start();
}
/// <summary>
/// 檢測時間與等待時間
/// </summary>
private void RunTimer()
{
int curM = Int32.Parse(DateTime.Now.Minute.ToString());
if((curM==0 || curM==30) && !bRun)
{
bRun = true;
Thread thread = new Thread(new ThreadStart(RunMethod));
thread.Start();
}
else
{
if(curM>30)
curM = 60-curM;
else
curM = 30-curM;
MessageBox.Show(curM.ToString());
Thread.Sleep(curM*60*1000);
RunTimer();
}
}
/// <summary>
/// 定時執行的方法
/// </summary>
private void RunMethod()
{
int iRun = 0;
try
{
MessageBox.Show(DateTime.Now.ToString());
bRun = false;
RunTimer();
}
catch
{
if(iRun<iCount) RunMethod();
else MessageBox.Show("系統執行問題");
}
finally
{
iRun++;
}
}
}
}