杀死等待答案的线程

时间:2012-06-15 17:54:22

标签: c# embedded

我正在用C#编写一个程序,该程序与一个小型显示单元连接,该单元可以处理与此问题无关的大量内容。

我遇到的问题详述如下: 当用户选择一个尝试将某些设置保存到设备的按钮时,它会使用确认协议来确保设置通过 (含义 - 它发送设置然后等待来自设备的确认包。)

我所做的是在主应用程序中生成一个线程,该线程将成为我将要生成的线程的“父”线程,该线程将尝试保存到设备。目前,它的工作方式如下:

  • 生成线程1 - >尽量保存。

  • 如果超时,中断线程1(释放设备的数据锁)通过Thread.Interrupt()< -----这就是问题。这不起作用。它会加亮锁定,直到设备关闭或拔下插头,然后出错。 (然后它会生成一个新线程,现在发生但它永远不会起作用,因为第一个线程仍然锁定数据)。

  • 如果没有超时,则线程1的回调让父线程知道不再生成线程。

  • 最后,如果没有一个线程成功,则整体尝试失败。

我也尝试过只生成并关闭一个线程,这也表现出相同的行为,当等待来自设备的确认时,它会永久挂起,直到设备断电或拔掉电源。

无法封装等待设备发送带有布尔值的ack,该布尔值可以设置为停止线程,因为它永远不会离开等待的调用。这是嵌入式软件,所以我无法修改等待功能。我只能修改嵌入式软件的C#接口。

2 个答案:

答案 0 :(得分:2)

你似乎在说你的线程1永远等待ACK。另一个线程检测到超时条件并尝试中断线程1.我建议线程1不应该永远等待,但应该在等待ACK时自行超时。然后,线程1可以重试或退出并显示错误,并且不需要来自另一个线程的中断。

答案 1 :(得分:0)

您应该使用Thread.Abort而不是Interrupt。 为了进一步澄清一下这个帖子 Abort Vs Interrupt

这可以解决您的问题。