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