public void Stop()
{
Run = false;
if (ScanThread == null) return;
ScanThread.Abort();
foreach (Thread thr in SecondaryThreads)
{
thr.Abort();
}
ScanThread.Join();
foreach (Thread thr in SecondaryThreads)
{
// avoid deadlocks when calling from secondary thread
if (thr.ManagedThreadId != Thread.CurrentThread.ManagedThreadId)
thr.Join();
}
}