C# Windows服务中未处理的ThreadInteruptedException
我有一个windows服务,当抛出未处理的ThreadInterruptedException时,该服务偶尔会崩溃并停止。此服务的主要功能是每x分钟(用户定义的时间跨度)运行一次同步。我只使用了一次Thread.Interrupt()方法两次(因为我知道它有多混乱)- 客户机可以通过TCP连接进行连接,但如果数据发送到客户机的速度太快,无法处理,则可以向服务发送“暂停”信号,然后在处理完所有数据后恢复(这些可能是无线设备,可能有多个客户端以不同的速度运行,因此我不想将任何这些留在TCP缓冲区中)。暂停然后使线程进入睡眠状态,恢复中断并继续 当TCP连接最初正在连接时,另一个用途与此类似 但是,我让此服务运行,即使我没有连接任何客户端,也会引发此异常!没有建立TCP连接,因此无法访问这些中断方法!我在服务中的每个线程.Sleep()周围都放置了try语句来捕获此异常,但仍会引发此异常 我肯定我错过了一些非常明显的东西,但它并没有冲着我跳,我已经找了好几天了C# Windows服务中未处理的ThreadInteruptedException,c#,windows-services,C#,Windows Services,我有一个windows服务,当抛出未处理的ThreadInterruptedException时,该服务偶尔会崩溃并停止。此服务的主要功能是每x分钟(用户定义的时间跨度)运行一次同步。我只使用了一次Thread.Interrupt()方法两次(因为我知道它有多混乱)- 客户机可以通过TCP连接进行连接,但如果数据发送到客户机的速度太快,无法处理,则可以向服务发送“暂停”信号,然后在处理完所有数据后恢复(这些可能是无线设备,可能有多个客户端以不同的速度运行,因此我不想将任何这些留在TCP缓冲区中)
提前感谢我看不到从甚至没有调用的方法中引发异常 另外,
threadinterruptedexception
不是由Sleep
方法引起的,而是由interrupt
方法引起的,因此try/catch
onSleep
在这里似乎不相关
发件人:
您可以通过以下方式中断正在等待的线程:
正在调用线程。在
阻止线程抛出
ThreadInterruptedException,其中
将线从挡块上断开
调用。线程应该捕获
ThreadInterruptedException和do
只要是适合继续下去的
正在工作。如果线程忽略
异常时,运行时捕获
异常并停止线程
对于任何阅读本文的人。我接受的答案是Hans Passant的评论。这个解决方案同样有效,并且消除了任何ThreadInterruptedException
平局不会从天而降。通过删除Interrupt()调用并将其替换为Auto/ManualResetEvent.Set()来改进代码
我不确定这里应该使用什么术语,但我想调用myThread。来自另一个线程的中断会导致线程抛出ThreadInterruptedException。myThread上的Sleep方法。这似乎是有道理的,但我是否完全误解了整个概念?这不是天方夜谭。通过删除e Interrupt()调用并将其替换为Auto/ManualResetEvent.Set()。很好的提示,Hans,没有更多错误!谢谢