2012-03-21 153 views
1

嗨,大家有一個問題,計時器基本上我有秒變量設置爲60,當它倒數到0我希望我的SQL命令運行更改數據庫,然後爲它生成一個消息框話說「」卡沒收「」什麼的,然後一旦點擊確定應用程序停止視覺工作室計時器問題

private void timer1_Tick(object sender, EventArgs e) 
{ 
    if (seconds < 1) 
    { 
     MessageBox.Show("Option timer Expired Card Confiscated please contact your local branch"); 
     timer1.Enabled = false; 
     sqlCommandTimer.Parameters["@cardNum"].Value = Class1.cardNumber; 
     sqlCommandTimer.Parameters["@confiscated"].Value = true; 
     try 
     { 
      sqlCommandTimer.Connection.Open(); 
      sqlCommandTimer.ExecuteNonQuery(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show(ex.Message); 
     } 
     finally 
     { 
      Application.Exit(); 
      sqlCommandTimer.Connection.Close();  
     } 

    } 
    else 
    { 
     seconds--; 
     listBox2.Items.Add(seconds); 
    } 

這是我的SQL命令

UPDATE  dbo.ATMCards 
SET    confiscated = @confiscated 
WHERE  (cardNumber = @cardNum) 

什麼我在想念將不勝感激任何幫助:)謝謝

編輯:哦,廢話對不起忘了加我的問題,它關係到0,則基本上不斷修建垃圾郵件

+0

任何更好的幫助,你的問題是什麼會更好:) – gbianchi 2012-03-21 16:54:24

+0

是什麼問題? – 2012-03-21 16:55:44

+0

'秒'是什麼?它是如何初始化的?定時器如何啓動?什麼是實際問題?什麼是「可視計時器」? – 2012-03-21 16:59:36

回答

1

MessageBox.Show停止正在執行的代碼的其餘部分,直到用戶點擊確定/取消/不管,但定時器將繼續因爲你正在檢查seconds < 1而不是== 0,產生更多的消息框和最終的SQL調用。

不是

  1. 顯示消息框
  2. 停止計時器
  3. 運行SQL

我建議你

  1. 停止計時器
  2. 運行SQL
  3. 顯示消息框

首先停止計時器保證了seconds < 1分支應該永遠只發生一次(雖然我還是會檢查== 0代替,並可能改變你的elseelse if (seconds > 0);第二次運行SQL可以確保在顯示消息時確實沒收了用戶的卡。