定时器C#。 启动,停止并获取通话之间的时间

可能重复:
如何测量函数运行多长时间?

我正在编写一个带有可靠数据传输的UDP聊天。 我需要在发送数据包时启动计时器,并在收到服务器的答复后立即停止(确认 – 确认)。

这是我的代码:

private void sendButton_Click(object sender, EventArgs e) { Packet snd = new Packet(ack, textBox1.Text.Trim()); textBox1.Text = string.Empty; Smsg = snd.GetDataStream();//convert message into array of bytes to send. while (true) { try { // Here I need to Start a timer! clientSock.SendTo(Smsg, servEP); clientSock.ReceiveFrom(Rmsg, ref servEP); //Here I need to stop a timer and get elapsed amount of time. Packet rcv = new Packet(Rmsg); if (Rmsg != null && rcv.ACK01 != ack) continue; if (Rmsg != null && rcv.ACK01 == ack) { this.displayMessageDelegate("ack is received :"+ack); ChangeAck(ack); break; } 

谢谢。

不要使用计时器。 它通常不够准确,并且有一个更简单的对象专为这项工作而设计: 秒表类。

MSDN文档中的代码示例:

 using System; using System.Diagnostics; using System.Threading; class Program { static void Main(string[] args) { Stopwatch stopWatch = new Stopwatch(); stopWatch.Start(); Thread.Sleep(10000); stopWatch.Stop(); // Get the elapsed time as a TimeSpan value. TimeSpan ts = stopWatch.Elapsed; // Format and display the TimeSpan value. string elapsedTime = String.Format("{0:00}:{1:00}:{2:00}.{3:00}", ts.Hours, ts.Minutes, ts.Seconds, ts.Milliseconds / 10); Console.WriteLine("RunTime " + elapsedTime); } } 

在您的情况下,您将在发送数据包时启动它,并在收到确认时停止它。

Stopwatch比任何计时器都要好得多。

 var stopwatch = new System.Diagnostics.Stopwatch(); stopwatch.Start(); // Your code here. stopwatch.Stop(); 

然后,您可以访问Elapsed属性( TimeSpan类型)以查看已用时间。