.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); // чтобы сборщик мусора не остановил таймер
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д