110,568
社区成员
发帖
与我相关
我的任务
分享
有个端口扫描的多线程程序,用Timer来得到扫描数据刷新UI界面合理吗?
主要代码如下:
button1_Click事件处理函数里有:
myThread = new Thread(new ThreadStart(this.StartScan));
myThread.Start(); //开始运行扫描端口号的线程
private void StartScan()
{
while (true)
{
for (int i = intstart; i <= intend; i++)
{
intflag = i; //记录正在扫描的端口号
try
{
TClient = new TcpClient(strName, i);//使用记录的计算机名称和端口号实例化侦听对象
intport = i; //记录已分配的端口号
}
catch { }
}
}
}
private void timer1_Tick(object sender, EventArgs e)
{
if (intport != 0) //判读是否有可用端口号
{
//向列表汇总添加扫描到的已用端口号
listView1.Items.Add(intport.ToString());
intport = 0;
}
if (progressBar1.Value < progressBar1.Maximum) //判断进度条的当前值是否超出其最大值
progressBar1.Value += 1; //将进度条的值加1
if (intflag == Convert.ToInt32(textBox2.Text)) //判断正在扫描的端口号是否是结束端口号
{
timer1.Stop(); //停止运行计时器
button1.Text = "扫描"; //设置按钮文本为扫描
MessageBox.Show("端口扫描结束!");
}
}