//状态刷新 private void RefreshBtn_Click(object sender, EventArgs e) { mainFrm_Load(sender, e); if (ips.GetLocalIP() != "127.0.0.1") { IsWireConn = true; } else { IsWireConn = false; OnlinePCLstv.Items.Clear(); SelectedIPTxt.Clear(); } }
//后台线程执行 private void bgw_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { //根据本地ip地址获取局域网计算机列表 //取 192.168.1. ip地址段 ScanBtn.Enabled = false; CancelScanBtn.Enabled = true;//激活终止扫描按钮 string[] splitedIP = ips.GetSplitedIP(ips.GetLocalIP()); //192.168.1. string IPblock = splitedIP[0] + "." + splitedIP[1] + "." + splitedIP[2] + "."; if (ips.GetLocalIP() == "127.0.0.1") { MessageBox.Show(this, "发生Ping异常,请检查您的网络连接,查看网线是否意外断开,或者禁用了本地连接等." + "\r\n" + "如果遇到网络延迟值极高的问题,请联系网络管理员." , "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); IsWireConn = false; ScanprogressBar.Value = 0; return; } //从1到255逐个ping for (int i = 1; i <= 255; i++) { ListViewItem items = new ListViewItem(); //列表项 if (bgw.CancellationPending) //如果CancelAsync()则取消操作 { return; } try { if (ping.Send(IPblock + i.ToString(), 6).Status == IPStatus.Success) { result = IPblock + i.ToString(); items = OnlinePCLstv.Items.Add(result); //计算机名无法获取的情况 try { items.SubItems.Add(ips.GetRemoteHostNameByIP(result)); } catch (Exception) { items.SubItems.Add("无法获取计算机名"); } items.EnsureVisible(); } bgw.ReportProgress(i); } catch (Exception)/*但是在扫描的时候可能会被断开网络连接,当断开时,提示*/ { //提示错误 MessageBox.Show(this, "发生Ping异常,请检查您的网络连接,查看网线是否意外断开,或者禁用了本地连接等." + "\r\n" + "如果遇到网络延迟值极高的问题,请联系网络管理员." , "错误", MessageBoxButtons.OK, MessageBoxIcon.Error); ScanprogressBar.Value = 0; //网线断开 IsWireConn = false; mainFrm_Load(sender, e); SelectedIPTxt.Clear(); return; } ProcLbl.Text = i.ToString(); } }