SetTimeout函數用於實現延時調用,它的參數為延時調用的毫秒數和腳本方 法名稱。在該函數中程序初始化一個名為myTimer定時器,設置它的Interval屬性為指定的毫 秒數,然後啟動該定時器。而在myTimer的定時事件處理中程序停止myTimer定時器,然後調 用腳本引擎的ExecuteSub函數運行指定名稱的無參數腳本方法。使用SetTimeout只會運行一 次腳本方法,在調用SetTimeout函數准備延時調用後可以調用ClearTimeout函數來立即取消 延時調用。
筆者使用以下代碼來實現定時調用的功能
/// <summary>
/// 定時調用使用的定時器控件
/// </summary>
private System.Windows.Forms.Timer myIntervalTimer = null;
/// <summary>
/// 定時調用的腳本方法的名稱
/// </summary>
private string strTimerIntervalMethod = null;
/// <summary>
/// 設置定時運行
/// </summary>
/// <param name="MinSecend">時間間隔毫秒數</param>
/// <param name="MethodName">方法名稱</param>
public void SetInterval(int MinSecend, string MethodName)
{
if (bolUserInteractive == false)
{
// 若不能和用戶互換則退出處理
return;
}
// 檢查參數
if (MethodName == null || MethodName.Trim().Length == 0)
{
return;
}
if (this.myEngine == null)
{
return;
}
if (myTimer != null)
{
//取消當前的延時 調用功能
myTimer.Stop();
}
strTimeoutMethod = null;
if (myEngine.HasMethod (MethodName.Trim()) == false)
return;
strTimerIntervalMethod = MethodName.Trim();
if (myIntervalTimer == null)
{
// 初始化定時調 用的定時器控件
myIntervalTimer = new System.Windows.Forms.Timer();
myIntervalTimer.Tick += new EventHandler(myIntervalTimer_Tick);
}
myIntervalTimer.Interval = MinSecend;
}
/// <summary>
/// 清除定時運行
/// </summary>
public void ClearInterval()
{
if (myIntervalTimer != null)
{
// 停止定時調用
myIntervalTimer.Stop();
}
strTimerIntervalMethod = null;
}
/// <summary>
/// 定時調用的定時器事件處理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void myIntervalTimer_Tick(object sender, EventArgs e)
{
if (myIntervalTimer != null)
{
// 設置定時調用的腳本方法名稱
strTimerIntervalMethod = strTimerIntervalMethod.Trim();
}
if (strTimerIntervalMethod == null
|| strTimerIntervalMethod.Length == 0
|| myEngine == null
|| myEngine.HasMethod(strTimerIntervalMethod) == false)
{
if (myIntervalTimer != null)
{
// 若沒找到指定名稱的腳本方法則停 止定時調用
myIntervalTimer.Stop();
}
return;
}
// 安全的執行指定 名稱的腳本方法
myEngine.ExecuteSub(strTimerIntervalMethod);
}
SetInterval函數用於實現定時調用,它的參數為兩次調用之間的時間間隔, 以及腳本方法名稱。在該函數中程序初始化一個名為myIntervalTimer的定時器,設置它的 Interval屬性為指定的時間間隔,然後啟動該定時器。在myIntervalTimer的定時事件處理中 程序調用腳本引擎的ExecuteSub函數運行指定名稱的無參數腳本方法。SetInterval會無休止 的定時調用腳本方法,直到調用ClearInterval函數終止定時調用。
延時調用和定時 調用是相互排斥的過程,啟動延時調用會停掉定時調用,而啟用定時調用會停掉延時調用。