Benutzer mit den meisten Antworten
Gibt es ping auch nicht blockierend?

Frage
-
Hallo,
während ich einen ping ausführe ist die Applikation blockiert.
Meine Frage:
Gibt es auch ein ping was nicht blockierend ist, oder muss ich das
selbst programmieren?
Außerdem suche ich Beispiel in dem eine VPN-Verbindung in C# erstellt wird.
Gruß Michael
Antworten
-
Hallo Michael,
da nunmal der Sinn eines Ping ist, auf die Antwort zu warten,
mußt schon einen Codeteil damit beschäftigen.
Das einfachste ist es das Ping in einen BackgroundWorker zu verfrachten.
Ein Beispiel hatte ich mal gegeben in: Perfomance Probleme und zum Anfang der Datei springenZum Verbindungsaufbau via VPN mußt Du in der Regel schon die Software bemühen.
Ein Beispiel für RAS findest Du z. B.
http://geekswithblogs.net/thibbard/articles/CSharpCodeToMaintainVPNConnectionProgramatically.aspx
Eine komplexere Biblithek: http://dotras.codeplex.com/Gruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 20. August 2010 12:57
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 15. September 2010 14:47
-
Hallo,
anscheinend führst du den Ping in dem selben Thread aus in dem auch deine GUI läuft, das führt dazu, dass das Programm nicht mehr reagiert, bis der Ping abgeschlossen ist.
Wenn du mal die Ping Klasse anschaust wirst du feststellen, dass diese die Methode SendAsync() besitzt, diese Methode führt den Ping automatisch in einem seperaten Thread aus. Wenn du dann noch das PingCompletet Event registrierst wirst du automatisch benachrichtigt, sobald der Ping im Hintergrund abgeschlossen wurde.
Konkret sieht das Ganze so aus:
Hoffe das hilft dir weiter.private void Form1_Load(object sender, EventArgs e) { System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping(); p.PingCompleted += new System.Net.NetworkInformation.PingCompletedEventHandler(p_PingCompleted); p.SendAsync(...); } void p_PingCompleted(object sender, System.Net.NetworkInformation.PingCompletedEventArgs e) { //Wenn der ping Abgeschlossen ist wierd diese methode aufgerufen //Alle informationen stehen in dem übergebenen Parameter e MessageBox.Show(e.Reply.Status.ToString()); }
MfG, Sebastian Gross- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 20. August 2010 08:39
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 15. September 2010 14:47
Alle Antworten
-
Hallo,
anscheinend führst du den Ping in dem selben Thread aus in dem auch deine GUI läuft, das führt dazu, dass das Programm nicht mehr reagiert, bis der Ping abgeschlossen ist.
Wenn du mal die Ping Klasse anschaust wirst du feststellen, dass diese die Methode SendAsync() besitzt, diese Methode führt den Ping automatisch in einem seperaten Thread aus. Wenn du dann noch das PingCompletet Event registrierst wirst du automatisch benachrichtigt, sobald der Ping im Hintergrund abgeschlossen wurde.
Konkret sieht das Ganze so aus:
Hoffe das hilft dir weiter.private void Form1_Load(object sender, EventArgs e) { System.Net.NetworkInformation.Ping p = new System.Net.NetworkInformation.Ping(); p.PingCompleted += new System.Net.NetworkInformation.PingCompletedEventHandler(p_PingCompleted); p.SendAsync(...); } void p_PingCompleted(object sender, System.Net.NetworkInformation.PingCompletedEventArgs e) { //Wenn der ping Abgeschlossen ist wierd diese methode aufgerufen //Alle informationen stehen in dem übergebenen Parameter e MessageBox.Show(e.Reply.Status.ToString()); }
MfG, Sebastian Gross- Als Antwort vorgeschlagen Frank Dzaebel Freitag, 20. August 2010 08:39
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 15. September 2010 14:47
-
Hallo Michael
für asynch-Ping wäre wohl
http://msdn.microsoft.com/en-us/library/system.net.networkinformation.ping.sendasync.aspx
Oder ggf. Alternative, eigenen Thread.
für VPN-Verbindung stellt sich eher die Frage, warum dies aus C# sein soll, bzw wozu die Verbindung danach genutzt werden soll.
Bei VPN kommt typisch auch die Angelegenheit mit den Anmeldedaten (User+password). -
Hallo Michael,
da nunmal der Sinn eines Ping ist, auf die Antwort zu warten,
mußt schon einen Codeteil damit beschäftigen.
Das einfachste ist es das Ping in einen BackgroundWorker zu verfrachten.
Ein Beispiel hatte ich mal gegeben in: Perfomance Probleme und zum Anfang der Datei springenZum Verbindungsaufbau via VPN mußt Du in der Regel schon die Software bemühen.
Ein Beispiel für RAS findest Du z. B.
http://geekswithblogs.net/thibbard/articles/CSharpCodeToMaintainVPNConnectionProgramatically.aspx
Eine komplexere Biblithek: http://dotras.codeplex.com/Gruß Elmar
- Als Antwort vorgeschlagen Robert BreitenhoferModerator Freitag, 20. August 2010 12:57
- Als Antwort markiert Robert BreitenhoferModerator Mittwoch, 15. September 2010 14:47