我继承了一些旧代码,在我看来,它的某些部分存在问题。
该程序使用 TCP/IP 与另一个程序通信,协议简单。发送命令电报并等待响应电报。
这是我认为有问题的部分。
public System.Timers.Timer retransmitTimer;
public TelegramBase SendAndWait(TelegramBase telegram)
{
CurrentTelegram = telegram;
retransmitTimer = new Timer(RetransmitInterval);
retransmitTimer.Elapsed += retransmitTimer_Elapsed;
//Send telegram
Send(telegram);
//Start timer
retransmitTimer.Start();
//Wait for response
var response = WaitForResponse(telegram as StandardTelegram);
//stop timer
retransmitTimer.Stop();
return response;
}
每次发送命令电报时都会调用方法 SendAndWait。
我的问题是计时器的创建
retransmitTimer = new Timer(RetransmitInterval);
retransmitTimer.Elapsed += retransmitTimer_Elapsed;
这将创建一个新的计时器,但当前的计时器永远不会被释放,所以它会继续运行?最好的情况是它会停止。
什么是更好的?
- 将计时器的创建移动到只调用一次的方法?
- 处置当前计时器,然后在 SendAndWait 中创建一个新计时器?