代码是扫描1-255在线IP,问题是:9是在线IP,扫描1-8,没问题未在线,但是扫描1-9,就变成全部在线了。 private void ScanIPTotal()
        {
            for (int i = 0; i < scanThreads.Length; i++)
            {
                
                    scanThreads[i] = new Thread(new ThreadStart(ScanIP));
                
                    scanThreads[i].IsBackground = true;
                    scanThreads[i].Start();
                
            }
        WaitIPScanFinish:
            Thread.Sleep(200);
            for (int i = 0; i < scanThreads.Length; i++)
            {
                if (scanThreads[i].ThreadState != ThreadState.Aborted && scanThreads[i].ThreadState != ThreadState.Stopped)
                {
                    Thread.Sleep(200);
                    goto WaitIPScanFinish;                          // 死循环等待所有扫描子线程结束
                }
                else 
                {
                }
            }
            ShowIPScanResult myShowIPScanResult = new ShowIPScanResult(Update_FinishIPScan);
            this.Invoke(myShowIPScanResult);           
        }
        private void ScanIP()
        {
        ScanLeftIP:
            string tmpIP="";
            lock (needScanIP)
            {
                if (needScanIP.Count > 0)
                {
                    tmpIP = needScanIP[needScanIP.Count - 1].ToString();
                    needScanIP.RemoveAt(needScanIP.Count - 1);
                }
                else
                {
                }
            }
            if (tmpIP != "")
            {
                if (PingHost.IpOnLine(tmpIP)==true)               // 判断在线
                {
                    lock(onlineIP)                                  // 锁住变量比锁住UI控件容易
                    {
                       
                        onlineIP.Add(tmpIP+"在线");
                        ShowIPScanResult uplsB = new ShowIPScanResult(Update_lsB_LiveHost);// 子线程一般不能直接修改UI,所以用这块委托(放外面可能会乱了)
                        this.Invoke(uplsB);
                    }
                }
                else
                {
                    lock (onlineIP)                                  // 锁住变量比锁住UI控件容易
                    {
                        onlineIP.Add(tmpIP + "未在线");
                        ShowIPScanResult uplsB = new ShowIPScanResult(Update_lsB_LiveHost);// 子线程一般不能直接修改UI,所以用这块委托(放外面可能会乱了)
                        this.Invoke(uplsB);
                    }
                }
                scanedIPCount ++;
                ShowIPScanResult upproBar = new ShowIPScanResult(Update_proBar_IPscan);
                this.Invoke(upproBar);
                goto ScanLeftIP;                                    // 死循环等待所有IP被扫描子完了,否则继续扫
            }
            else
            {
            }
        }