Ejemplo n.º 1
0
            public void Scan()
            {
                this.scannersNotComplete    = (UInt16)(maxPort - minPort + 1);
                this.scannersDoneWaitHandle = new EventWaitHandle(false, EventResetMode.ManualReset);

                for (UInt16 port = minPort; port <= maxPort; port++)
                {
                    if (port <= 0)
                    {
                        break;            // use this if maxPort == 65535
                    }
                    Boolean threadsNotAvailable = !threadTracker.Available;
                    if (threadsNotAvailable)
                    {
                        Console.WriteLine("Reached maximum threads ({0}) at port {1}", maxThreads, port);
                        if (sleepTime > 0)
                        {
                            Console.WriteLine("Sleeping for {0} milliseconds...", sleepTime);
                            Thread.Sleep((Int32)sleepTime);
                        }
                    }
                    threadTracker.Reserve();
                    if (threadsNotAvailable)
                    {
                        Console.WriteLine("Continuing Thread Creation", port);
                    }
                    new Thread(new PortConnectionThread(this, port).Run).Start();
                }

                Console.WriteLine("Waiting for remaining threads to finish...");
                this.scannersDoneWaitHandle.WaitOne();
            }