2012-03-21 119 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可以确保在显示消息时确实没收了用户的卡。