for (int i = 0; i < 8; i++) { Label a = new Label(); a.Width = 50; a.Location =new System.Drawing.Point(20,i*20); }
我做了一个ping服务器的软件,每一台服务器的ip我启动一个线程去ping 然后ping返回的响应时间作为 lable的长度 ,我可以生成一次清空一次 ,但这样我觉得很浪费 每次都要 new一个label,我觉得服务器比如说5个那个就有5个label对应,我精确定位没个label就改变其长度就可以了,但是问题自动生成的lanbel该如何获取他们的 名字呢 比如上面的a又不能用i来作为label的名字,有谁有思路吗?下面是代码
for (int i = 1; i < 4; i++) { ParameterizedThreadStart ts = new ParameterizedThreadStart(new cl(Calculate)); Thread td = new Thread(ts); MyThreadParameter paramter = new MyThreadParameter("www.baidu.com", i.ToString()); td.Start(paramter); } //四个线程启动
public void Calculate(object ms) { MyThreadParameter parameter = ms as MyThreadParameter; while (true) { int a = ping(parameter.Interval);//这个是传递过来的IP //this.BeginInvoke(new o(other)); //写到ping后再清空groupbox,因为ping会延迟返回值。如果先清空groupbox会造成ping的这段时间label没有显示 this.BeginInvoke(new changeText(CalcFinished), a.ToString(), parameter.LoopCount); Thread.Sleep(2000); } }
//根据每个IP的响应时间 做label的长度
public void CalcFinished(string result, string id) { if (this.InvokeRequired) { this.BeginInvoke(new changeText(CalcFinished), result); } else { //this.groupBox1.Controls.Clear(); Label textBox1 = new Label(); textBox1.BackColor = System.Drawing.Color.Red; textBox1.Location = new System.Drawing.Point(20, Convert.ToInt32(id)*40); textBox1.Text = result; textBox1.Width = Convert.ToInt32(result) / 10; this.groupBox1.Controls.Add(textBox1); } }
软件界面就是
www.baidu.com label
www..... label
www............ label
label 如上每两秒ping一次返回响应时间作为label的长度更新前面服务器对应的lable
如我上面缩写的一次只能显示一个label 因为我要清空groupbox来显示新的label 如果我有lable的name我就直接改变他的长度 而不用去清空 再new 了
//以上代码是部分代码 还有许多命名不正确的 以及多余没用的大家不用管,我复制过来的,改了很多次我没删 能成功运行的 看着不舒服而已
添加回答
举报
0/150
提交
取消