代码是扫描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
{
}
}
{
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
{
}
}
解决方案 »
- 请问StackPanel里有一些的的button,如何设置让这些button之间有一定的空隙呢?
- C# winform 通过Graphics绘画出来的画,怎么改透明度呀
- 管理员 用户
- 我在98系统中装了.NETFrame,我可以运行程序,但是出现这样的错误.
- 手动打开excel文件,再运行程序,文件关闭进程也释放不掉
- 测试BeginInvoke出现的问题
- 请高手指点,如何用C#实现文件的上传,注意容量大于4M,请文怎么实现,谢谢
- C# 面向对象设计 实现一个小功能
- 大神能否解答下面的代码是什么意思 就这么一段 剩下的猜吧
- 动态调用FORM的问题,高手请进!
- 怎样将xml转换为Dataset,然后在treeview中显示
- 这样的数据类型转化
if (needScanIP.Count > 0)
{
tmpIP = needScanIP[needScanIP.Count - 1].ToString();
needScanIP.RemoveAt(needScanIP.Count - 1);
}