延時調用和定時調用
在Window全 局對象中,筆者使用System.Windows.Forms.Timer對象實現了延時調用和定時調用,由於定 時器對象屬於用戶互換相關的功能,因此延時調用和定時調用受到UserInteractive屬性的影 響。筆者使用以下代碼來實現延時調用的功能
private string strTimeoutMethod = null;
private System.Windows.Forms.Timer myTimer;
/// <summary>
/// 設置延時調用
/// </summary>
/// <param name="MinSecend">延時的毫秒數</param>
/// <param name="MethodName">調用的方法名稱</param>
public void SetTimeout (int MinSecend, string MethodName)
{
// 若不支持和用戶互換 則本功能無效
if ( bolUserInteractive == false)
return;
if (myEngine == null)
return;
if (myIntervalTimer != null)
{
// 取消當前的演示處理
myIntervalTimer.Stop();
}
strTimerIntervalMethod = null;
if (myTimer == null)
{
// 若定時器不存在則創建新的定時器對象
myTimer = new System.Windows.Forms.Timer();
myTimer.Tick += new EventHandler(myTimer_Tick);
}
// 設置定時器
myTimer.Interval = MinSecend;
// 設置腳本方法名稱
strTimeoutMethod = MethodName;
// 啟動定時器
myTimer.Start();
}
/// <summary>
/// 清除延時調用
/// </summary>
public void ClearTimeout()
{
if (myTimer != null)
{
// 停止定時器
myTimer.Stop();
}
// 清空延時調用的腳本方法名稱
strTimeoutMethod = null;
}
/// <summary>
/// 延時 調用的定時器事件處理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void myTimer_Tick(object sender, EventArgs e)
{
myTimer.Stop();
if (myEngine != null && strTimeoutMethod != null)
{
// 獲得腳本方法
string m = strTimeoutMethod.Trim ();
strTimeoutMethod = null;
if (myEngine.HasMethod(m))
{
// 若腳本引擎中定義了該名稱的腳本方法則安全的執行該腳本方法
myEngine.ExecuteSub(m);
}
}
}