为什么我的WinForm花费这么多时间来执行ping线程?

时间:2019-06-17 15:03:38

标签: c# multithreading winforms ping display

我有一个Winform,它可以ping用户选择的IP地址范围。 ping的答案根据IP地址写在不同的richTextBox中。

我可以选择一次ping几个范围的ping。例如我将x.x.1.1 ping到x.x.1.10;然后在第二次我将x.x.2.1 ping至x.x.2.10。前10个IP地址将写入10 richTextBox;那么将在另外10个richTextBox中写入第10个IP地址。

我的问题:当我ping 10秒IP地址时,我的程序至少需要3秒钟才能使ping出现在richTextBoxs中。 (如果出现了..)

如果我打开10个程序并ping 1 ping范围就可以了。但是,如果我打开1个程序来ping 2个IP地址范围,那么它将不起作用。

现在输入代码:

-用户选择IP地址范围。 (比如说x.x.x.1到x.x.x.10)

Thread th1 = new Thread(() => runPing(1, 1));
th1.Start();
Thread th2 = new Thread(() => runPing(2, 1));
th2.Start();
.
.
Thread th10 = new Thread(() => runPing(10, 1));
th10.Start();

//当它是第二个IP范围时,它是=> runPing(x, 2

public void runPing(object ip, int nbAdd)
  {
  string command = "/c ping -t x.x.x."+ ip;
  ProcessStartInfo procStartInfo = new ProcessStartInfo("CMD.exe", command);
  Process proc = new Process();
  proc.StartInfo = procStartInfo;
  //some procStartInfo
  proc.Start();
  proc.OutputDataReceived += new DataReceivedEventHandler((sender, e) => proc_OutputDataReceived(sender, e, ip, nbAdd)); //I add parameters because i will need them later
  proc.BeginOutputReadLine();
  }

void proc_OutputDataReceived(object sender, DataReceivedEventArgs e, object ip, int nbAdd)
  {  
  //read the ouput and put the ping in a int named ping
  switch(nbAdd)
    {
    case 1:
      switch(ip)
      {
      case 1:
        MethodInvoker append1 = () => richTextBox1.Text += ping.ToString() + " ms \n";  
        richTextBox1.BeginInvoke(append1);
        richTextBox1.TextChanged += new EventHandler((s, ev) => richTextBox_TextChangedPing(s, ev, nb, ping, numAdd)); //not sure if it's relevant but every time the ping change I make some changement in the WinForm (like label colors...)
        break;
        .
        .
      case 10:
      }
    case 2: 
    //second range of ping with another switch(ip)
  }

x.x.1.1是用richTextBox1编写的。 x.x.1.2是用richTextBox2编写的。 x.x.2.1是用richTextBox21 ....

是的,我知道,我的代码是安静的冗余代码(我为向您展示它感到羞愧),但现在还可以,并且可以正常工作。正如我所说,我想解决第二个IP地址范围的延迟问题。

有时它可以用于richTextBox的一部分,有时仅在刷新后才可以使用,有时ping会在5秒钟后将所有内容ping一次写入richTextBox。

在功能更强大的CPU(?)中似乎延迟更短了

好吧,我试图找到一种解决方案,但是当您不知道问题出在哪里时,它就很难解决。

感谢您到目前为止的阅读。

0 个答案:

没有答案