C# 当窗体关闭时,如何退出后台线程?
我正在自己的线程内调用C# 当窗体关闭时,如何退出后台线程?,c#,C#,我正在自己的线程内调用tcpListener.AcceptTcpClient()。因为这会永远阻塞,所以当窗体关闭时线程不会退出。我尝试调用listenThread.Abort(),但线程没有退出。它卡在AcceptCpcClient()上 如何在关闭主窗体时关闭整个程序?在启动侦听器线程之前,将Thread.IsBackgroundThread设置为true。这将阻止它在所有其他(非后台)线程退出时保持进程运行 一个可能更好(如果更复杂)的解决方案是切换到异步API,正如@JohnKoerne
tcpListener.AcceptTcpClient()
。因为这会永远阻塞,所以当窗体关闭时线程不会退出。我尝试调用listenThread.Abort()
,但线程没有退出。它卡在AcceptCpcClient()
上
如何在关闭主窗体时关闭整个程序?在启动侦听器线程之前,将
Thread.IsBackgroundThread
设置为true。这将阻止它在所有其他(非后台)线程退出时保持进程运行
一个可能更好(如果更复杂)的解决方案是切换到异步API,正如@JohnKoerner链接的问题的公认答案所述。两个独立的问题:
tcpListener.Server.Dispose()
这将导致所有被阻止的操作因SocketException而失败。捕捉这个,处理它并允许线程终止。我认为listenThread.Interrupt()可能重复;更安全