2009-04-21 98 views
1

在c#中的lan messenger的模拟中,我创建了一个线程,用于侦听来自lan上的远程主机的广播通知。为了监听广播消息,我正在调用睡眠函数,并再次重新启动线程的执行。 这样做的问题是,当我关闭表单时,此线程继续运行。是否有任何事件在我关闭表单时被调用?关闭窗体的事件

回答

1

您的线程应该等待来自主(窗体)线程的信号(具有等于睡眠方法的睡眠时间的超时),而不是休眠功能。

当处理关闭事件:

  1. 主线程应该设置这个信号和通话Thread.Join
  2. 其他线程应该退出循环,并完成其工作
  3. 主线程然后恢复工作关闭表格。
+0

我的主线程有一些需要并行执行的事件,所以调用thread.join不会帮助。 无论如何,新线程可以检测窗体关闭事件并随后终止? 如果可能请提供代码片段。感谢 – Avik 2009-04-21 05:07:54

2

如果在侦听器线程上将.IsBackground属性设置为true,那么在关闭应用程序时它将被关闭。

Form.Closing在窗体实际关闭之前调用,之后调用Form.Close - 您也可以使用其中任何一种来终止线程。