Tjakka5

Untitled

Dec 22nd, 2020
1,309
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 2.92 KB | None | 0 0
  1. // Pingen van alle locaties
  2. // Wordt uitgevoerd bij het starten van het programma en daarna telkens na het verlopen van de timer
  3. public void PingLocaties()
  4. {
  5.     OleDbConnection con = new OleDbConnection();
  6.     con.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ToString();
  7.     con.Open();
  8.     OleDbCommand cmd = new OleDbCommand();
  9.     cmd.CommandText = "select Locatie_dns from Locaties";
  10.     cmd.Connection = con;
  11.     OleDbDataReader ldns = cmd.ExecuteReader();
  12.  
  13.     List<string> loc_dns = new List<string>();
  14.     int i;
  15.  
  16.     while (ldns.Read())
  17.     {
  18.         loc_dns.Add((string)ldns["Locatie_dns"]);
  19.     }
  20.     try
  21.     {
  22.         // We maken een List aan voor events...
  23.         List<ManualResetEvent> events = new List<ManualResetEvent>();
  24.  
  25.         for (i = 0; i < loc_dns.Count; i++)
  26.         {
  27.             // ...En maken een event voor elk ping. Deze voegen we ook toe aan de lijst
  28.             var finishedEvent = new ManualResetEvent(false);
  29.             events.add(finishedEvent);
  30.  
  31.             string loopIp = loc_dns[i];
  32.             WaitCallback func = delegate (object state)
  33.             {
  34.                 if (PingIP(loopIp))
  35.                 {
  36.                     // Resultaat OK wegschrijven naar de database bij geslaagde ping
  37.                     try
  38.                     {
  39.                         OleDbConnection con1 = new OleDbConnection();
  40.                         con1.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ToString();
  41.                         con1.Open();
  42.                         OleDbCommand cmd1 = new OleDbCommand();
  43.                         cmd1.CommandText = "update Locaties set [Locatie_status] = @l1 where locatie_dns='" + loopIp + "'";
  44.                         cmd1.Parameters.AddWithValue("@l1", "OK");
  45.                         cmd1.Connection = con1;
  46.                         int a = cmd1.ExecuteNonQuery();
  47.                         con1.Close();
  48.                     }
  49.                     catch (Exception ex)
  50.                     {
  51.                         MessageBox.Show("Er is iets fout gegaan:  " + ex);
  52.                     }
  53.                 }
  54.                 else
  55.                 {
  56.                     // Resultaat NOK wegschrijven naar de database bij mislukte ping
  57.                     try
  58.                     {
  59.                         OleDbConnection con1 = new OleDbConnection();
  60.                         con1.ConnectionString = ConfigurationManager.ConnectionStrings["Connection"].ToString();
  61.                         con1.Open();
  62.                         OleDbCommand cmd1 = new OleDbCommand();
  63.                         cmd1.CommandText = "update Locaties set [Locatie_status] = @l1 where locatie_dns='" + loopIp + "'";
  64.                         cmd1.Parameters.AddWithValue("@l1", "NOK");
  65.                         cmd1.Connection = con1;
  66.                         int a = cmd1.ExecuteNonQuery();
  67.                         con1.Close();
  68.                     }
  69.                     catch (Exception ex)
  70.                     {
  71.                         MessageBox.Show("Er is iets fout gegaan:  " + ex);
  72.                     }
  73.                 }
  74.  
  75.                 // Wanneer de ping klaar is kunnen we de Event 'Set'en om zo te indiceren dat deze ping actie klaar is
  76.                 finishedEvent.Set();
  77.             };
  78.             ThreadPool.QueueUserWorkItem(func);
  79.         }
  80.     }
  81.     catch
  82.     {
  83.         MessageBox.Show("Catch");
  84.     }
  85.  
  86.     // We wachten asynchroon om niet de rest van het programma te blokkeren
  87.     ThreadPool.QueueUserWorkItem(delegate {
  88.         // Alle ping acties zijn ingepland
  89.         // Nu moeten we wachten tot alle events ge'Set' zijn
  90.         WaitHandle.WaitAll(events.ToArray());
  91.  
  92.         // En nu kunnen we de rest uitvoeren
  93.         con.Close();
  94.         LoadGridLocaties();
  95.     });
  96. }
Advertisement
Add Comment
Please, Sign In to add comment