IronPython / C# 脚本运行后无法重新打开串行端口



程序" Mission Planner"允许运行Python脚本以自定义程序的行为。"任务计划者"以自己的线程运行脚本。线程运行时,我可以选择按" thread.abort()"任务计划者"中的" thread.abort()"按钮。当我按此按钮时,脚本中止了,但是当我再次运行脚本时,我这次无法打开串行端口。我相信这是因为线程在关闭串行端口之前退出。有没有办法可靠地处理thread.abort()?或者,当我打开端口时处理这个问题会更好?

这是Mission Planner Github

的链接

这是任务计划者计划的链接

下面是我的python脚本。

注意:这是我脚本的简化版本,证明了我的问题。我的脚本旨在在后台运行,直到被中止为止。

import clr
clr.AddReference('System')
from System import *
serialPort = IO.Ports.SerialPort("COM3")
serialPort.BaudRate = 9600
serialPort.DataBits = 8
serialPort.Open()
while 1:
    print serialPort.ReadLine()
serialPort.Close()

system.io.ports.serialport实现Idisposable作为释放分配资源的设施(在您的情况下为串行端口本身)。使用ways语句作为C#的Ironpython使用语句,应有助于释放Thread.Abort上的串行端口。

可以通过以下方式更改脚本:

import clr
clr.AddReference('System')
from System import *
with IO.Ports.SerialPort("COM3") as serialPort:
    serialPort.BaudRate = 9600
    serialPort.DataBits = 8
    serialPort.Open()
    while 1:
        print serialPort.ReadLine()

side Note(即使它很可能无法控制):流产线程通常被视为不良习惯(例如,请参见围绕该主题的许多问题),因为它不是处理外部外部的安全方法/不受信任/性能缠绕的代码,因为它不能保证线程流产或提供适当的隔离(与使用App域 策略相比)。正如您已经经历的那样,对执行的线程/代码也不便。

最新更新