C#多线程与ping.exe合用,压缩ping的时间问题

xb12369 2012-04-25 11:20:18
我当前的程序使用的是单线程,大概4s/url,然后数据库中大概有1100条数据,算下来的话,跑完全程需要一个半小时,
怎样通过多线程来控制压缩这个时间在半小时左右,跪求大神的帮助,在线等答复!!!

我把我的代码贴出来!!!


#region 加载窗体
private void FrmTest_Load(object sender, EventArgs e)
{
this.lblAllUrl.Text = "所有的链接" + "【当前时间" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "】:";
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
Thread t = new Thread(new ThreadStart(ping));
t.Start();

}
#endregion


#region 加载连接对象并获得url值,然后以数组的形式返回
private string[] GetData()
{
try
{
string connString = ConfigurationManager.ConnectionStrings["connStringLocal"].ConnectionString.ToString();

SqlConnection conn = new SqlConnection(connString);

conn.Open();

string sql = "select top(10) RemoteHost,HotelName from dbo.HotelConn where UseWebSrvFlag=1";

SqlCommand command = new SqlCommand(sql, conn);

SqlDataReader reader = command.ExecuteReader();


while (reader.Read())
{
txtAllUrl.AppendText(reader[1].ToString() + ":" + reader[0].ToString() + "," + "\r\n");
}
txtAllUrl.Text = txtAllUrl.Text.Remove(txtAllUrl.Text.LastIndexOf(','), 1);

reader.Close();
conn.Close();

strLeg = txtAllUrl.Text.Split(',');


lblAll.Text = "一共:" + strLeg.Length.ToString();

return strLeg;
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
return null;
}
#endregion

#region 具体的ping方法
protected void ping()
{
try
{
ProcessStartInfo start = new ProcessStartInfo("Ping.exe");//设置运行的命令行文件问ping.exe文件,这个文件系统会自己找到
//如果是其它exe文件,则有可能需要指定详细路径,如运行winRar.exe

string[] newStrLeg = GetData(); //以 北京前门店:192.168.103.10 形式
int len = newStrLeg.Length;

for (int i = 0; i < len; i++)
{
txtCommand.Text = "";

string[] newNameStrLeg = newStrLeg[i].Split(':'); //将格式分割成:店名[0] url[1]


txtNow.Text = newNameStrLeg[1].ToString();

start.Arguments = newNameStrLeg[1].ToString();

start.CreateNoWindow = true;//不显示dos命令行窗口
start.RedirectStandardOutput = true;//
start.RedirectStandardInput = true;//
start.UseShellExecute = false;//是否指定操作系统外壳进程启动程序
Process p = Process.Start(start);

StreamReader reader = p.StandardOutput;//截取输出流
string line = reader.ReadLine();//每次读取一行
while (!reader.EndOfStream)
{
txtCommand.AppendText(line + "\r\n");
line = reader.ReadLine();
}



p.WaitForExit();
p.Close();//关闭进程
reader.Close();//关闭流
Thread.Sleep(500);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}

}
#endregion
...全文
284 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xb12369 2012-04-26
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

哇,好长代码,帮忙顶下,顺便学习
[/Quote]

感谢一楼的帮顶,问题已经解决了,最后还是用多线程搞定的!!!
loveoflife0411 2012-04-25
  • 打赏
  • 举报
回复
哇,好长代码,帮忙顶下,顺便学习
loveoflife0411 2012-04-25
  • 打赏
  • 举报
回复
哇,好长代码,帮忙顶下,顺便学习

111,098

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧