2013-07-01 59 views
2

後,我想在預定時間後停止計時。我正在製作在線考試申請表,學生在預定時間後將無法繼續進行考試。我已經實現了計時器,它是工作很好,但我想要的計時器應自動獲得後停止說1個小時20分鐘。所以我的問題是,如何寫出這種情況,並在哪裏?我正在使用ASP.net C#。我的示例代碼:停止計時器在asp.net C#預定時間

static DateTime dt; 
int m_StartTime = Environment.TickCount; 
long m_Interval = new TimeSpan(0, 1, 0).Ticks; 

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (!Page.IsPostBack) 
    { 
     dt = new DateTime(2011, 1, 1, 0, 0, 0); 
     Timer1.Enabled = false; 
     Timer1.Interval = 1000; 
    } 
} 
protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    dt = dt.AddSeconds(10); 
    Label1.Text = dt.ToString("H:mm:ss"); 
    if (Environment.TickCount - m_StartTime > m_Interval) 
    { 
     Timer1.Enabled=false;    
    } 


} 
protected void start_Click(object sender, EventArgs e) 
{ 
    Timer1.Enabled = true; 
} 
+1

爲您的健康建議,同時編寫代碼:用meanningful的名字,如startButton,scoreLabel和testEndTimer等等 而不是出Button1,Button2 ...按鈕53. –

+0

我是有點困惑 - 爲什麼不使用** clientSide腳本**來禁用控件。如果時間已過,則在服務器上的每個回發檢查中,在**服務器存儲啓動時間在DB **中? –

+0

弗朗茨先生,可以請你幫助我通過給樣品。其實沒有什麼是我的工作。認爲我是一個新手。謝謝。 –

回答

2

我想你可以存儲蜱的數量,當你開始計時Environment.TickCount然後在Timer1_Tick事件中,你檢查當前的滴答數 - 蜱的存儲數量比你更大間隔。然後你停止計時器。你可以得到一個值來比較喜歡:new TimeSpan(1, 20, 0).Ticks

... 
Timer1.Enabled = true; 
m_StartTime = Environment.TickCount 
m_Interval = new TimeSpan(1, 20, 0).Ticks; 
... 

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    dt = dt.AddSeconds(1); 
    Label1.Text = dt.ToString("H:mm:ss");  
    if (Environment.TickCount - m_StartTime > m_Interval) 
    { 
     Timer1.Stop(); 
    } 
} 

當然你也可以做一個常數,而不是變量等等,這只是爲了說明這個想法的例子。

P.S.順便說一下,你似乎只需要一個布爾startstop而不是一個字符串。

+0

好,串站只是用於測試目的,可以請您詳細闡述你的答案,我的意思是你可以嵌入我的代碼,代碼的幾行,我不能作出這樣的。謝謝。 –

+0

請參閱答案 –

+0

即使在今天計算的的panelty如果statment每1秒是什麼,我仍然認爲第二個定時器是有用的:)甚至只是爲了去除雜波 –

0

在asp.net中,它不是那種易於使用的定時器,我建議你應該閱讀這個 msdn-article。 對於一般我會建議你使用爲目的的第二計時器,而不是添加額外的邏輯來的第一個。你也應該使用enum或bool作爲startstop。

0
protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!Page.IsPostBack) 
     { 
      dt = new DateTime(2011, 1, 1, 0, 0, 0); 
      Timer1.Enabled = false; 
      Timer1.Interval = 1000; 
      Timer2.Enabled = false; 
      Timer2.Interval = 1000 * 60 * MIN_PER_TEST; // set interval for a test, if it is changing, do this in Button1_click [startstop=="stop"] before setting Enabled = true 
      startstop = "Stop"; 
     } 
    } 

    // end of the test came, do what you need to do in order to kill the student mood further more :) 
    protected void Timer2_Tick(object sender, EventArgs e) 
    { 
     Button1_Click(sender, e); // simulate clicking STOP, though might want to replace that! 
    } 

    // Added start and stop for the test duration timer. 
    protected void Button1_Click(object sender, EventArgs e) 
    { 
     if (startstop == "Stop") 
     { 
      startstop = "Start"; 
      Timer1.Enabled = true; 
      Timer2.Enabled = true; 
      Button1.Text = "Stop"; 
     } 
     else 
     { 
      startstop = "Stop"; 
      Timer1.Enabled = false; 
      Timer2.Enabled = false; 
      Button1.Text = "Start"; 
     } 
    } 

希望這會對您有所幫助。

0
public partial class _Default : System.Web.UI.Page 
{ 
    static DateTime dt = new DateTime(2014,9,1,0,0,0,000); 
    Timer t = new Timer(); 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Timer1.Enabled = false; 
      Timer1.Interval = 1; 
      lbl.Text = dt.ToLongTimeString() + ":" + dt.Millisecond; 
     } 
    } 

protected void Timer1_Tick(object sender, EventArgs e) 
{ 
    dt = dt.AddMilliseconds(1); 
    lbl.Text = dt.ToLongTimeString() + ":" + dt.Millisecond; 
} 


protected void Reset_Click(object sender, EventArgs e) 
{ 
    Timer1.Enabled = false; //For stop the timer 
    dt = new DateTime(2014, 9, 1, 0, 0, 0, 000); 
    lbl.Text = dt.ToLongTimeString() + ":" + dt.Millisecond; 

} 
protected void Pause_Click(object sender, EventArgs e) 
{ 
    Timer1.Enabled = false; //For stop the timer 

} 
protected void Start_Click(object sender, EventArgs e) 
{ 
    Timer1.Enabled = true; // For starting the timer 
} 

}