评论
所有者
你好, 最后!我知道这个问题并实际实施了一个解决方法(显然不起作用)。既然我知道去哪里找,我会尝试解决这个问题。诚然,我在任务和线程方面都没有经验,所以这会很有趣:D 谢谢! |
作者
好吧,我找到了解决方案。问题在于您如何处理“Work()”方法中的异常。 解决方案是使用“RaiseEvent”方法,它接受一个“Action”。使用“RaiseEvent”方法的好处是它调用动作并告诉主线程执行它。因此,通过将“RaiseEvent”方法传递给“Disconnect”调用,“RaiseEvent”将告诉主线程调用“Disconnect”,就像按下断开按钮一样。我知道这听起来很混乱,但毕竟线程很混乱 另一个出现的问题是“Connection”无法关闭,因为在连接中断的时候关闭了,导致异常。我只是将“Connection.Close()”调用包装在一个 try-catch 表达式中,并以此抑制了异常。 修复不需要大量代码修改,所以我将它们粘贴在这里: |
所有者
再次嗨, 马丁 |
嗨马丁!
在铣完一块新的 PCB 并在晚上查看任务管理器后,我注意到后台运行着三个 OpenCNCPilot 进程。他们不使用任何处理器时间,所以我真的不介意,但不得不手动关闭它们仍然有点烦人。我试图重新创建此错误并找到了罪魁祸首。当您断开与 CNC 的 USB 连接并关闭 OpenCNCPilot 时,串行连接不会终止,只会在后台运行(?)。我这样做了七次,只是为了 100% 确定:
我查看了代码并尝试对其进行调试,但不幸的是,当涉及到 C# 中的线程时,我并不是那么了解(我自己更像是一个任务专家 :D)。不过,我确实发现问题似乎出在“WorkerThread.Join ( );” 在“Machine.cs”文件的第 538 行调用。“Join()”方法应该等待“WorkerThread”完成并终止(?),但不知何故从未发生过,因此连接不会关闭并阻止程序退出。