.NET 4.x Timer для нестатического метода - C#

Узнай цену своей работы

Формулировка задачи:

Доброй ночи! Не могу разобраться с таймером. Имеется вот такой код (прошу прощения за размер). Нужно запускать метод Temp через определенные промежутки времени или по расписанию. Но при попытке создания таймера/делегата/события сталкиваюсь с основной проблемой - компилятор требует задать метод как static, но это не вариант. Кто может подсказать, как реализовать это? Все поиски в интернете дают решение только по статическим методам.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Thread.;
using System.Timers;
using System.Net;
using SnmpSharpNet;
using System.Data;
using System.Globalization;
using System.Web;
using MySql.Data.MySqlClient;
 
namespace zelenka
{
    public class GetTemp
    {
        //private static System.Timers.Timer myTimer;
        int dopust_temp = 60;
 
        static void Main(string[] args){
            
        }

        private void Temp()
            {
                OctetString community = new OctetString("public");// SNMP community name
                AgentParameters param = new AgentParameters(community);// Установка параметров класса
                param.Version = SnmpVersion.Ver1;//установка SNMP версии (1 или 2)
                IpAddress agent = new IpAddress("192.168.15.20");
                UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);// устанавливаем цель
                Pdu pdu = new Pdu(PduType.Get); //класс PDU используется для всех запросов
                pdu.VbList.Add(".1.3.6.1.4.1.40418.2.3.4.1.0");//IOD температуры
            try{ //если не выполнилось, значит не было ответа от агента по запросу
                SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param); //делаем запрос SNMP 
                if (result != null){  //если незультат нулевой, то ответа не было или его не получилось разобрать
                    if (result.Pdu.ErrorStatus != 0) {  //если ошибка, возвращаемая агентом, отличается от 0, то смотреть SnmpConstants для определения 
                        string value = "Error in SNMP reply. Error " + result.Pdu.ErrorStatus.ToString() + " index " + result.Pdu.ErrorIndex;
                        GetTemp tem = new GetTemp ();
                        tem.insertData (value);
                    }
                    else{
                        int value = Convert.ToInt32 (result.Pdu.VbList [0].Value.ToString(), 10);
                        if (value>dopust_temp){
                            GetTemp tem = new GetTemp();
                            tem.message (value.ToString());
                        }
                        else{
                            GetTemp tem = new GetTemp ();
                            tem.insertData (value.ToString());
                        }
                    }
                }
            }
 
            catch {//если не было ответа, то соответствующая запись в бд
                string value = "No response received from SNMP agent.";
                GetTemp tem = new GetTemp ();
                tem.insertData (value);
            }
        }

        private void insertData(string val)   //Добавление новой записи с помощью параметризованного запроса
        {
            string conStr = "server=127.0.0.1;user=root;" +
                "database=mydb;";
            using (MySqlConnection con = new MySqlConnection(conStr)){
                DateTime date = DateTime.Today;
                string time = DateTime.Now.ToLongTimeString();
                try{
                    string sql = "INSERT INTO temperature (date, time, value)"+"VALUES (@date, @time, @val)";
 
                    MySqlCommand cmd = new MySqlCommand(sql, con);
                    cmd.Parameters.AddWithValue("@date", date);//создаем параметры и добавляем их в коллекцию
                    cmd.Parameters.AddWithValue("@time", time);
                    cmd.Parameters.AddWithValue("@val", val);
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
 
                catch (Exception ex){ //обработка ошибки записи в бд 
                    string sql = "INSERT INTO error_log (error)" +
                        "VALUES (@exception)";
 
                    MySqlCommand cmd = new MySqlCommand(sql, con);
                    cmd.Parameters.AddWithValue("@exception", ex);//создаем параметры и добавляем их в коллекцию
                    con.Open();
                    cmd.ExecuteNonQuery();
                }
            }
        }
 
        private void message (string val){
            
        }
    }
}

Решение задачи: «.NET 4.x Timer для нестатического метода»

textual
Листинг программы
Console.ReadKey(); // ждем пока пользователь не нажмет, чтобы выйти
GC.KeepAlive(t); // чтобы сборщик мусора не остановил таймер

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 3.625 из 5
Похожие ответы