Как я могу объявить много таймеров и остановить таймер, когда время истекло в C#?
Я постараюсь описать его как можно подробнее. заранее спасибо.
Есть ли способ объявить много таймеров, например, с помощью массива или других методов? и остановить таймер, когда таймер истекает или время истекло?
Я пробовал t. Stop (); и другие методы таймера, но я не могу заставить его работать. этот код показывает окно сообщения каждую минуту или независимо от того, что пользователь ввел в таймер. Проблема в том, что я могу остановить таймер, когда у меня есть несколько таймеров.
У меня есть форма это позволяет пользователю ввести таймер, например 1 минуту, эта форма всплывает, когда я выбираю строку в представлении таблицы данных, код преобразует часы или минуты в секунды и работает нормально.
private void button1_Click(object sender, EventArgs e) { if (textBox1.Text == "") { MessageBox.Show("Please Indicate How Many Minutes/Hours."); } else { string desu = textBox1.Text; int temp = 0; if (int.TryParse(desu, out temp)) { if (comboBox1.Text == "Hours") { //hours to seconds time = temp * 3600; eta = desu + "Hours"; this.Close(); } else if (comboBox1.Text == "Minutes") { //minutes to seconds time = temp * 60; eta = desu + "Minutes"; this.Close(); } } else { MessageBox.Show("Please enter a valid integer"); } } }
после ввода таймера через 1 минуту появится окно сообщения и остановит текущий таймер.
вот метод, который вызывается при запуске таймера
public void Start() { ETA_Input frm = new ETA_Input(this); startTime = DateTime.Now; t = new System.Timers.Timer(1000 * f); t.Elapsed += timer_Elapsed; t.Enabled = true; }
а затем вот где он запускает форму, в которой вы можете ввести часы или минуты и передать значение строки в представление списка, изменив одно из значений в datagridview и в databse.
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { ETA_Input frm = new ETA_Input(this); frm.ShowDialog(); if (frm.time != 0) { string name = dataGridView1.CurrentRow.Cells[0].Value.ToString(); int deku = Int32.Parse(name); string constring = "server=localhost;database=dbhorizon;uid=root;password=1234"; string Query = "update tblUserIdd set User_Available = 'Ongoing' where User_ID='" + deku + "' "; MySqlConnection conDatabase = new MySqlConnection(constring); MySqlCommand cmdDatabase = new MySqlCommand(Query, conDatabase); MySqlDataReader myReader; conDatabase.Open(); myReader = cmdDatabase.ExecuteReader(); dgvref(); string id = dataGridView1.CurrentRow.Cells[0].Value.ToString(); string naem = dataGridView1.CurrentRow.Cells[1].Value.ToString(); string field = dataGridView1.CurrentRow.Cells[2].Value.ToString(); f = frm.time; Start(); seconds = string.Format("{0:HH:mm:ss tt}", DateTime.Now); string[] row = { id, naem, field, seconds, frm.eta,custb }; var listViewItem = new ListViewItem(row); listView1.Items.Add(listViewItem); } }
а вот событие Time elapsed, в котором я намеревался остановить таймер, что время истекло, и удалить элемент в представлении списка при изменении значения в datagridview в базу данных. я также не могу удалить элемент, где время истекло или прошло.
void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) { TimeSpan timeSinceStart = DateTime.Now - startTime; MessageBox.Show("A Service is finished"); string name = dataGridView1.CurrentRow.Cells[0].Value.ToString(); int deku = Int32.Parse(name); string constring = "server=localhost;database=dbhorizon;uid=root;password=1234"; string Query = "update tblUserIdd set User_Available = 'Available' where User_ID='" + deku + "' "; MySqlConnection conDatabase = new MySqlConnection(constring); MySqlCommand cmdDatabase = new MySqlCommand(Query, conDatabase); MySqlDataReader myReader; conDatabase.Open(); myReader = cmdDatabase.ExecuteReader(); dgvref(); }
Что я уже пробовал:
Я перепробовал кучу вещей, которые, как я выяснил, на самом деле не связаны с тем, что я хочу делать.
Richard Deeming
Ваш код уязвим для SQL-инъекция[^]. НИКОГДА используйте конкатенацию строк для построения SQL-запроса. ВСЕГДА используйте параметризованный запрос.
Все, что вы хотели знать о SQL-инъекции (но боялись спросить) | Трой Хант[^]
Как я могу объяснить SQL-инъекцию без технического жаргона? | Обмен Стеками Информационной Безопасности[^]
Шпаргалка по параметризации запросов / OWASP[^]