ahmed_sa Ответов: 2

Как выполнить функцию ниже каждые 10 секунд по таймеру ?


Проблема
Мне нужно выполнять функцию извлечения изображения каждые 10 секунд с помощью управления таймером

я уже поставил управление таймером на форму windows, но как запустить и выполнить эту функцию

в таймере каждые 10 секунд .

это означает, что мне нужно каждые 10 секунд обновлять и выполнять функцию ниже

Я работаю над windows form csharp visual studio 2017 с sql server 2012

Что я уже пробовал:

public void GetMembersData()
      {
           string sqlGetLast = @"select isnull((select top 1 MemberCode from members order by MemberCode desc),1) ";
           int MemberCode = Utilities.ObjectConverter.ConvertToInteger(DataAccess.ExecuteScalar(sqlGetLast));
           string sqlImage = "select MemberImage FROM Members WHERE MemberCode =" + MemberCode + "";
           if (Utilities.ObjectConverter.ConvertToString(DataAccess.ExecuteScalar(sqlImage)) != "")
           {
               byte[] MemberImage = (byte[])DataAccess.ExecuteScalar(sqlImage);
               pictureBox1.Image = ByteArrayToImagebyMemoryStream(MemberImage);
           }
       }

2 Ответов

Рейтинг:
1

OriginalGriff

Установите интервал таймера на 10 секунд: 10000
Обработка события Тика таймера
Запустите таймер.
В обработчике тиков вызовите свой метод.


Рейтинг:
0

Maciej Los

Решение №1 по OriginalGriff[^] отлично и подробно объясняет, как использовать таймер.

Я хотел перевести ваше внимание на эти вещи:
1) возможно SQL-инъекция[^]
Никогда не используйте такие команды:

string sqlImage = "select MemberImage FROM Members WHERE MemberCode =" + MemberCode + "";

Вместо этого используйте параметризованные запросы! Видеть: Как выполнить параметризованный запрос | Microsoft Docs[^]
Например:
string sConStr = @"your_connection_string_here!";
DataTable dt = new DataTable();

//1. create SqlConnection
using(SqlConnection connection  = new SqlConnection(sConStr))
{
    //open connection
    connection.Open()
    //set command text
    string sql = @"SELECT * FROM TableName WHERE TextField Like @SomeString;";
    //2. create command
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
        command.Parameters.AddWithValue("@SomeString", "%whatever%")
        //3. create reader
        using (SqlDataReader reader = command.ExecuteReader())
        {
            //4. load data into datatable
            dt.Load(reader)
        }
    }
}


2) ненужные вызовы базы данных
Я почти уверен, что вы хотите проверить, если MemberImage был изменен. Если я прав, то я бы предложил использовать Класс SqlDependency (System.Data.SqlClient) | Microsoft Docs[^]

Для получения более подробной информации, пожалуйста, смотрите:
Обнаружение изменений с помощью SqlDependency | Microsoft Docs[^]
Использование SqlDependency для событий изменения данных[^]
Уведомление о запросе с использованием SqlDependency и SqlCacheDependency[^]