public void StopStream() { if (CaptureThread != null) { int delayMillis = 1000; try { IsRunning = false; CaptureThread.Join(delayMillis); if (CaptureThread.IsAlive) { Console.WriteLine("Tempo excedido; Thread ainda não terminou seu processamento"); } else { Console.WriteLine("thread terminou de uma forma não bloqueante!"); } } catch (ThreadInterruptedException e) { Console.WriteLine(e + "Thread foi interrompida por alguma excessão lançada"); } //CaptureThread.Join(); //CaptureThread = null; SenseManager.Dispose(); Session.Dispose(); } }
public void StartWatching() { DevicesAndPackets = new Dictionary <ICaptureDevice, ArrayList>(); DateTime DateToSavePcap = DateTime.Now.AddMinutes(MinToSaveSniff); while (keepRunning) { System.Threading.Thread.Sleep(1000); if (Devices == null) { Devices = CaptureDeviceList.Instance; foreach (ICaptureDevice Device in Devices) { StartDeviceSniff(Device); } } else { CaptureDeviceList NewDevices = CaptureDeviceList.Instance; foreach (ICaptureDevice NewDevice in NewDevices) { bool DeviceIsOld = false; foreach (ICaptureDevice OldDevice in Devices) { if (Devices.Contains(NewDevice)) { DeviceIsOld = true; break; } } if (!DeviceIsOld) { StartDeviceSniff(NewDevice); } } Devices = NewDevices; } if (DateTime.Now.CompareTo(DateToSavePcap) >= 0) { DateToSavePcap = DateToSavePcap.AddMinutes(MinToSaveSniff); SavePackets(); } } foreach (Thread CaptureThread in CaptureThreads) { CaptureThread.Abort(); } }