如何使用TcpListener阻止调用终止Windows服务

时间:2013-02-04 11:17:04

标签: windows-services tcplistener

我有一个运行单独后台线程的Windows服务。在线程内部,它启动一个TCP服务器,使用TcpListener监听客户端。

我想知道如果有阻塞读取,我可以优雅地关闭服务:

listener.AcceptTcpClient();

我发现显然一个Windows服务可以中止任何其他线程,只要它们被设置为后台线程,但是如果其中一个线程阻塞了怎么办?这是否有所不同?如果是这样,处理这种情况的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

最好的方法是在服务的停止事件上调用listener.Close()。它将使用SocketException中止阻止通话。

线程的状态(阻塞或运行)不会影响线程是后台的事实。因此,如果您从后台线程中调用listener.AcceptTcpClient(),它将在服务停止时中止,