C#中timer的使用?
问题说明,我需要定时的做一个UDP广播,假设为一秒。现在我使用了System.Threading.Thread.Timer来帮组我打到这个效果,具体代码如下:
CheckOnline()是我主窗体的构造函数。我遇到的问题是当运行该程序时窗体可以正常显示,当时Timer只会执行两次就不再执行,即我只检测到它发了两次UDP广播包。而我将主线程永久睡眠时可以让timer正常执行,即每个一秒发送一个UDP广播报。我的需求就是既要让主窗体正常显示又要让timer正常执行。请问有没有什么好方法达到我的目的?最好不要用互斥或信号量等。
public CheckOnline()
{
InitializeComponent();
TimerCallback delegate_CheckOnline = new TimerCallback(CheckOnline.CheckOnlineStatus);
System.Threading.Timer timer = new System.Threading.Timer(delegate_CheckOnline, null, 0, 1000);
// Thread.Sleep(Timeout.Infinite);
}
public static void CheckOnlineStatus(object s)
{
// 发送广播信号,通报自己存在;
IPEndPoint lan = new IPEndPoint(IPAddress.Parse("192.168.2.255"), 9000);
// IPEndPoint localEP_Send=new IPEndPoint(IPAddress.Parse("192.168.2.250"),0);
UdpClient Client = new UdpClient();
byte[] hello = Encoding.ASCII.GetBytes("hello");
Client.Send(hello, hello.Length,lan);
}CheckOnline()是我主窗体的构造函数。我遇到的问题是当运行该程序时窗体可以正常显示,当时Timer只会执行两次就不再执行,即我只检测到它发了两次UDP广播包。而我将主线程永久睡眠时可以让timer正常执行,即每个一秒发送一个UDP广播报。我的需求就是既要让主窗体正常显示又要让timer正常执行。请问有没有什么好方法达到我的目的?最好不要用互斥或信号量等。
...全文


