C#怎么设置while循环每一秒循环一次并统计次数
猴子我苦思一晚,,没人来解决http://bbs.csdn.net/topics/390368476
我就改了下代码,用while来循环,,但是解决了上面链接的问题后,又出现新问题,,就是怎么来控制while循环每隔一段时间循环一次,,,并在datagridview中动态显示(如1.2.3.4这样递增显示出来)
public void hexing_ping(object obj)
{
int i = Convert.ToInt32(obj);
while (ff)
{
Thread.Sleep(500);
Ping pp = new Ping();
PingReply ppResult = pp.Send(Convert.ToString(hexing_date.Rows[i].Cells[1].Value), 10);
hexing_date.Rows[i].Cells[2].Value = ppResult.RoundtripTime.ToString();
hexing_date.Rows[i].Cells[3].Value = ppResult.Status.ToString();
z++;
hexing_date.Rows[i].Cells[4].Value = z;
}
//Thread.Sleep(500);
}
private Boolean ff = true;
是统计z的次数(强调下,这里是一直ping多个IP地址,我把z++放在while中后,就出现,z是在运行了多次了,并不是我想要的由1开始递增)求解决方案,,是每隔一段时间运行,并把z由数字1动态显示递增,,,
[解决办法]
ping的话最好用多线程,效率高,你这样ping速度很慢的,如果用多线程就没有你说的每隔一段时间显示的问题,ping有结果后就显示,
[解决办法]
一定要这么做,可以这样:
public void hexing_ping(object obj)
{
int i = Convert.ToInt32(obj);
DateTime tmStart=DateTime.Now;
while (ff)
{
while((DateTime.Now-tmStart).TotalSeconds<1.0) Thread.Sleep(100);
tmStart=DateTime.Now;
Ping pp = new Ping();
PingReply ppResult = pp.Send(Convert.ToString(hexing_date.Rows[i].Cells[1].Value), 10);
hexing_date.Rows[i].Cells[2].Value = ppResult.RoundtripTime.ToString();
hexing_date.Rows[i].Cells[3].Value = ppResult.Status.ToString();
z++;
hexing_date.Rows[i].Cells[4].Value = z;
}
//Thread.Sleep(500);
}
private Boolean ff = true;
[解决办法]
不过一般你ping一次花的时间都超过1秒,没法一秒ping一次的,
[解决办法]
你可以在1s内“ping一次”,只要你把timeout搞小一点就行了。
你也可以同时ping多个主机,就好比你在windows中打开多个控制台调用ping,而Windows不会卡死一样。
你在解决问题的时候又创造了更多新的问题。所以虽然你一直在解决问题,但是看起来却徒劳无功。比如如何使用多线程更新你的界面,如何调度多个任务,如何合理设计你的程序结构,这些问题才是你应该分类依次解决的,而不是一上来就是解决具体的问题。
[解决办法]
timer控件不行?
[解决办法]
多进程,或者多线程, 开多个 ping, ping的结果std out/err,可以 同步,也可以异步获取
基础都没有, 玩这种 "堆积木", 没有任何意义的
--------------
侯捷<MFC> 勿在浮沙驻高台
经典言论啊.
很多.Net er,操作系统原理,编译原理,计算机原理,等 基础课的基础,都没学会
甚至与看到一帖子, 连 windows的任务管理器,taskmgr,怎么打开都不懂. 居然也来写程序
拖出控件华丽的程序,拼凑出冗长的SQL. 连Visual Studio的基本功能都不知道,怎么运行程序都不知道,也下载了ASP.Net全站源码
[解决办法]
最简单的办法把这个玩意丢到time控件里面