我有定时检查死对等的代码。我使用System.Threading.Timer来做到这一点。检测代码有效,我称之为:
Timer SocketKPATimer = new Timer(delegate { timedcode(state); }, null, 5000, 5000);
其中state是用于
的StateObjectSocket handler = state.workSocket;
以后......
handler.Shutdown(SocketShutdown.Both);
//I need to stop the Timer here
方法本身定义为
static void timedcode(StateObject state) {...}
现在的问题是,在我发现对等方出现问题后,我需要停止SocketKPATimer而不能。 我如何修改timedcode以便我可以停止计时器?
答案 0 :(得分:1)
您要访问SocketKPATimer
的一种方法是将Timer
传递给状态对象中的timedcode(state)
方法。这意味着您必须创建一个包含Socket
和Timer
属性的类。然后,您可以先定义Timer
,然后使用委托对其进行实例化,并引用Timer
。这不会处理访问“Timer”的任何类型的并发问题。您应该使用典型的多线程技术。
示例:
class State
{
public Socket WorkSocket { get; set; }
public System.Threading.Timer TimerThingy { get; set; }
}
private void Nothing()
{
Socket someSocket = null;
System.Threading.Timer socketKPATimer = null;
State state = new State();
state.WorkSocket = someSocket;
state.TimerThingy = socketKPATimer;
socketKPATimer = new System.Threading.Timer(delegate { timedcode(state); }, null, 5000, 5000);
}
private void timedcode(object state)
{
var s = state as State;
Socket hander = s.WorkSocket;
System.Threading.Timer timer = s.TimerThingy;
hander.Shutdown(SocketShutdown.Both);
}