我正在用 C# 编写一个程序,它与一个小型显示单元交互,该单元执行一大堆与此问题无关的事情。
我遇到的问题详细如下:当用户选择一个将尝试将某些设置保存到设备的按钮时,它使用确认协议来确保设置通过(意思-它发送设置然后等待确认来自设备的数据包。)
我所做的是在我的主应用程序中生成一个线程,该线程将成为我将要生成的线程的“父”线程,它将尝试保存到设备。目前,它的工作方式如下:
生成线程 1 -> 尝试保存。
如果超时,通过 Thread.Interrupt() 中断线程 1(释放设备的数据锁)<----- 这就是问题所在。这行不通。它加粗锁定,直到设备关闭或拔出,然后出错。(然后它会生成一个新线程,现在发生但它永远不会工作,因为第一个线程仍然锁定数据)。
如果没有超时,线程 1 的回调让父线程知道不再生成任何线程。
最后,如果没有线程成功,则整体尝试失败。
我也尝试过只生成并关闭一个线程来执行此操作,这也表现出相同的行为,即在等待来自设备的确认时,它会永久挂起,直到设备关闭或拔下电源。
没有办法封装等待设备发送带有布尔值的确认,该布尔值可以设置为停止线程,因为它永远不会离开等待调用。这是嵌入式软件,所以我无法修改等待功能。我只能修改嵌入式软件的C#接口。