public partial class Form1 : Form
{
public ulong dataTCP = 0;
public ulong dataUDP = 0;
public static TraceEventSession tSession;
List<int> processList = new List<int>();
object counterLock = new object();
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
NetTraffic();
}
/// <summary>
/// 根据程序名统计流量
/// </summary>
public void NetTraffic() //static
{
Debug.WriteLine("===================进入方法=========================");
tSession = new TraceEventSession("KernelAndClrEventsSession");
tSession.EnableKernelProvider(KernelTraceEventParser.Keywords.NetworkTCPIP);
Debug.WriteLine("===================获取进程=========================");
Process[] processes = Process.GetProcesses();
foreach (Process process in processes)
{
processList.Add(process.Id);
}
Debug.WriteLine("===================开启线程=========================");
Thread thread = new Thread(GetTraffic);
thread.IsBackground = true;
thread.Start();
}
public void GetTraffic()
{
Debug.WriteLine("==================创建委托============================");
tSession.Source.Kernel.TcpIpRecv += data =>
{
if (processList.Contains(data.ProcessID))
{
Debug.WriteLine("流量TCP:" + data + ":" + (ulong)data.size + ":" + data.ProcessName);
dataTCP += (ulong)data.size;
this.Invoke(new Action(() =>
{
textBox1.AppendText("流量TCP:" + dataTCP + ":" + (ulong)data.size + ":" + data.ProcessName +"\r\n");
}));
}
};
tSession.Source.Kernel.UdpIpRecv += data =>
{
if (processList.Contains(data.ProcessID))
{
dataUDP += (ulong)data.size;
Debug.WriteLine("流量UDP:" + dataUDP + ":" + (ulong)data.size + ":" + data.ProcessName);
}
};
tSession.Source.Process();
}
}