2010-02-12 2 views

ответ

1

Вы можете использовать класс PerformanceCounter. Запустите Perfmon.exe, чтобы узнать, что доступно на вашем компьютере. Например, для каждого сетевого адаптера должен быть присвоен сетевой интерфейс + отправленные пакеты.

+0

Знаете ли вы хорошее чтение/учебник по этому вопросу? Я новичок в программировании Windows, и msdn кажется слишком спагетти для меня. В любом случае, спасибо, я думаю, это то, что я искал. – Thiago

+0

Попробуйте следующее: http://www.codeproject.com/KB/dotnet/perfcounter.aspx –

1

Это лениво и обман здесь, но .... Я знаю, что я буду пламен для этого ... Не могли бы вы использовать процесс для выполнения netstat -e n где n - интервал в количестве секунд. Если вы говорите о Winforms/WPF, используя класс System.Diagnostics.Process для вывода в скрытое окно с выходом, перенаправленным на входной поток, в котором вы можете проанализировать отброшенные пакеты?

Edit: Вот предлагаемый образец кода

 
    public class TestNetStat 
    { 
     private StringBuilder sbRedirectedOutput = new StringBuilder(); 
     public string OutputData 
     { 
      get { return this.sbRedirectedOutput.ToString(); } 
     } 
     public void Run() 
     { 
      System.Diagnostics.ProcessStartInfo ps = new System.Diagnostics.ProcessStartInfo(); 
      ps.FileName = "netstat"; 
      ps.ErrorDialog = false; 
      ps.Arguments = "-e 30"; // Every 30 seconds 
      ps.CreateNoWindow = true; 
      ps.UseShellExecute = false; 
      ps.RedirectStandardOutput = true; 
      ps.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; 

      using (System.Diagnostics.Process proc = new System.Diagnostics.Process()) 
      { 
       proc.StartInfo = ps; 
       proc.Exited += new EventHandler(proc_Exited); 
       proc.OutputDataReceived += new System.Diagnostics.DataReceivedEventHandler(proc_OutputDataReceived); 
       proc.Start(); 
       proc.WaitForExit(); 
       proc.BeginOutputReadLine(); 
       while (!proc.HasExited) ; 
      } 
     } 

     void proc_Exited(object sender, EventArgs e) 
     { 
      System.Diagnostics.Debug.WriteLine("proc_Exited: Process Ended"); 
     } 

     void proc_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e) 
     { 
      if (e.Data != null) this.sbRedirectedOutput.Append(e.Data + Environment.NewLine); 
      // Start parsing the sbRedirected for Discarded packets... 
     } 
    } 

Простых, скрытые окна ....

Надеются, что это помогает, С наилучших пожеланиями, Том.

Смежные вопросы