pingSender.SendAsync() shouldn't be executed from a new thread since SendAsync will not block the calling thread. It puts it on the thread pool automatically.

Also for a 32 byte buffer:
byte[] buffer = new byte[32];

Finally, get rid of AutoResetEvent. I have never used it, I don't see why you should need it for a simple async ping request.

@Angeix: locks aren't needed here.
Hyperz Reviewed by Hyperz on . [C#] AutoResetEvent Freezing application! using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using System.Net; using System.Net.NetworkInformation; Rating: 5