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

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

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

Доброй ночи! Не могу разобраться с таймером. Имеется вот такой код (прошу прощения за размер). Нужно запускать метод Temp через определенные промежутки времени или по расписанию. Но при попытке создания таймера/делегата/события сталкиваюсь с основной проблемой - компилятор требует задать метод как static, но это не вариант. Кто может подсказать, как реализовать это? Все поиски в интернете дают решение только по статическим методам.
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Thread.;
  6. using System.Timers;
  7. using System.Net;
  8. using SnmpSharpNet;
  9. using System.Data;
  10. using System.Globalization;
  11. using System.Web;
  12. using MySql.Data.MySqlClient;
  13. namespace zelenka
  14. {
  15. public class GetTemp
  16. {
  17. //private static System.Timers.Timer myTimer;
  18. int dopust_temp = 60;
  19. static void Main(string[] args){
  20. }
  21.  
  22. private void Temp()
  23. {
  24. OctetString community = new OctetString("public");// SNMP community name
  25. AgentParameters param = new AgentParameters(community);// Установка параметров класса
  26. param.Version = SnmpVersion.Ver1;//установка SNMP версии (1 или 2)
  27. IpAddress agent = new IpAddress("192.168.15.20");
  28. UdpTarget target = new UdpTarget((IPAddress)agent, 161, 2000, 1);// устанавливаем цель
  29. Pdu pdu = new Pdu(PduType.Get); //класс PDU используется для всех запросов
  30. pdu.VbList.Add(".1.3.6.1.4.1.40418.2.3.4.1.0");//IOD температуры
  31. try{ //если не выполнилось, значит не было ответа от агента по запросу
  32. SnmpV1Packet result = (SnmpV1Packet)target.Request(pdu, param); //делаем запрос SNMP
  33. if (result != null){ //если незультат нулевой, то ответа не было или его не получилось разобрать
  34. if (result.Pdu.ErrorStatus != 0) { //если ошибка, возвращаемая агентом, отличается от 0, то смотреть SnmpConstants для определения
  35. string value = "Error in SNMP reply. Error " + result.Pdu.ErrorStatus.ToString() + " index " + result.Pdu.ErrorIndex;
  36. GetTemp tem = new GetTemp ();
  37. tem.insertData (value);
  38. }
  39. else{
  40. int value = Convert.ToInt32 (result.Pdu.VbList [0].Value.ToString(), 10);
  41. if (value>dopust_temp){
  42. GetTemp tem = new GetTemp();
  43. tem.message (value.ToString());
  44. }
  45. else{
  46. GetTemp tem = new GetTemp ();
  47. tem.insertData (value.ToString());
  48. }
  49. }
  50. }
  51. }
  52. catch {//если не было ответа, то соответствующая запись в бд
  53. string value = "No response received from SNMP agent.";
  54. GetTemp tem = new GetTemp ();
  55. tem.insertData (value);
  56. }
  57. }
  58.  
  59. private void insertData(string val) //Добавление новой записи с помощью параметризованного запроса
  60. {
  61. string conStr = "server=127.0.0.1;user=root;" +
  62. "database=mydb;";
  63. using (MySqlConnection con = new MySqlConnection(conStr)){
  64. DateTime date = DateTime.Today;
  65. string time = DateTime.Now.ToLongTimeString();
  66. try{
  67. string sql = "INSERT INTO temperature (date, time, value)"+"VALUES (@date, @time, @val)";
  68. MySqlCommand cmd = new MySqlCommand(sql, con);
  69. cmd.Parameters.AddWithValue("@date", date);//создаем параметры и добавляем их в коллекцию
  70. cmd.Parameters.AddWithValue("@time", time);
  71. cmd.Parameters.AddWithValue("@val", val);
  72. con.Open();
  73. cmd.ExecuteNonQuery();
  74. }
  75. catch (Exception ex){ //обработка ошибки записи в бд
  76. string sql = "INSERT INTO error_log (error)" +
  77. "VALUES (@exception)";
  78. MySqlCommand cmd = new MySqlCommand(sql, con);
  79. cmd.Parameters.AddWithValue("@exception", ex);//создаем параметры и добавляем их в коллекцию
  80. con.Open();
  81. cmd.ExecuteNonQuery();
  82. }
  83. }
  84. }
  85. private void message (string val){
  86. }
  87. }
  88. }

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

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

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


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

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

8   голосов , оценка 3.625 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы