private void pingWorker_DoWork(object o) { PingRange pingRange = (PingRange)o; byte[] start = pingRange.StartRange.GetAddressBytes(); byte[] end = pingRange.EndRange.GetAddressBytes(); LinkedList <Thread> threads = new LinkedList <Thread>(); for (byte o0 = start[0]; o0 <= end[0]; o0++) { for (byte o1 = start[1]; o1 <= end[1]; o1++) { for (byte o2 = start[2]; o2 <= end[2]; o2++) { for (byte o3 = start[3]; o3 <= end[3]; o3++) { pingBlock.WaitOne(); Thread t = new Thread(new ParameterizedThreadStart(DoPing)); t.Start(new IPAddress(new byte[] { o0, o1, o2, o3 })); threads.AddLast(t); } } } } foreach (Thread ln in threads) { ln.Join(); } try { RaiseNetScanComplete(); } catch (InvalidOperationException) { } }
public void Start(PingRange pr) { Thread t = new Thread(new ParameterizedThreadStart(pingWorker_DoWork)); t.Start(pr); }