A longer diatribe that reaches the same conclusion:
And just in case the links above die, here's the gist of it:
"...you must explicitly call IDisposable.Dispose(), or you’ll end up with the inherited Dispose() method which doesn’t do anything useful at all in this case. You can do this by casting the Ping object to IDisposable."
private void Refresh(Object sender, EventArgs args)
Ping ping = null;
ping = new Ping();
ping.PingCompleted += PingComplete;
private void PingComplete(Object sender, PingCompletedEventArgs args)