视觉工作室计时器问题

时间:2012-03-21 16:51:56

标签: c# visual-studio-2010

嗨大家有一个问题的计时器基本上我有秒变量设置为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然后基本上不断地垃圾邮件

1 个答案:

答案 0 :(得分:1)

MessageBox.Show会停止执行其余代码,直到用户单击“确定/取消”或“其他”为止,但计时器将继续滴答,因为您正在检查seconds < 1而不是{{1} },生成更多的消息框,以及最终的SQL调用。

而不是

  1. 显示消息框
  2. 停止计时器
  3. 运行SQL
  4. 我建议你

    1. 停止计时器
    2. 运行SQL
    3. 显示消息框
    4. 首先停止计时器确保== 0分支只应该发生一次(尽管我仍然会检查seconds < 1,并可能将您的== 0更改为else ;运行SQL秒确保在显示消息时,用户的卡确实被没收。