程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(上)(14)

C#發現之旅第十四講 基於動態編譯的VB.NET腳本引擎(上)(14)

編輯:關於C語言

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函數終止定時調用。

延時調用和定時 調用是相互排斥的過程,啟動延時調用會停掉定時調用,而啟用定時調用會停掉延時調用。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved