визуальные проблемы со студийным таймером - PullRequest
1 голос
/ 21 марта 2012

Привет, ребята, есть проблема с таймером, в основном у меня переменная секунд установлена ​​на 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)

любая помощь в том, что мне не хватает, будет принята с благодарностью :) спасибо

edit: ой дерьмо извините забыл добавить мою проблему, она идет к 0, то в основном постоянно спамит сообщение

1 Ответ

1 голос
/ 21 марта 2012

MessageBox.Show останавливает выполнение остальной части вашего кода до тех пор, пока пользователь не нажмет OK / Cancel / что угодно, но таймер продолжит тикать и, поскольку вы проверяете seconds < 1 вместо == 0, создавая больше ящиков сообщений, и возможные вызовы SQL.

Вместо

  1. Показать окно сообщения
  2. Таймер остановки
  3. Запуск SQL

Я бы предложил вам

  1. Таймер остановки
  2. Запуск SQL
  3. Показать окно сообщения

Остановка таймера в первую очередь гарантирует, что ветвь seconds < 1 должна произойти только один раз (хотя я бы все равно проверил == 0 вместо этого и, возможно, изменил бы ваш else на else if (seconds > 0); запуск SQL-секунды гарантирует, что к моменту отображения сообщения карта пользователя действительно была конфискована.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...