Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
IronPython/C#我能';t在脚本运行后重新打开串行端口_C#_Python_Multithreading_Serial Port_Ironpython - Fatal编程技术网

IronPython/C#我能';t在脚本运行后重新打开串行端口

IronPython/C#我能';t在脚本运行后重新打开串行端口,c#,python,multithreading,serial-port,ironpython,C#,Python,Multithreading,Serial Port,Ironpython,程序“Mission Planner”允许运行python脚本以自定义程序的行为。“任务规划器”在自己的线程中运行脚本。当线程运行时,我可以选择按下中止按钮,该按钮在“任务计划器”中调用“thread.abort()”。当我按下此按钮时,脚本中止,但当我再次运行脚本时,我这次无法打开串行端口。我相信这是因为线程在关闭串行端口之前中止。有没有一种方法可以可靠地处理线程。Abort()?还是在我打开端口时处理这个问题更好 这里有一个链接到 这里有一个链接到 下面是我的Python脚本 注意:这是我的

程序“Mission Planner”允许运行python脚本以自定义程序的行为。“任务规划器”在自己的线程中运行脚本。当线程运行时,我可以选择按下中止按钮,该按钮在“任务计划器”中调用“thread.abort()”。当我按下此按钮时,脚本中止,但当我再次运行脚本时,我这次无法打开串行端口。我相信这是因为线程在关闭串行端口之前中止。有没有一种方法可以可靠地处理线程。Abort()?还是在我打开端口时处理这个问题更好

这里有一个链接到

这里有一个链接到

下面是我的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()
实现为释放已分配资源的工具(在您的情况下为串行端口本身)。使用as of应有助于释放
线程上的串行端口。中止

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

导入clr
clr.AddReference('系统')
从系统导入*
使用IO.Ports.SerialPort(“COM3”)作为SerialPort:
serialPort.BaudRate=9600
serialPort.DataBits=8
serialPort.Open()
而1:
打印serialPort.ReadLine()
旁注(即使它很可能超出您的控制):中止线程通常被认为是一种不好的做法(参见示例),因为它不是处理外部/不受信任/性能提升代码的安全方法,因为它不能保证线程中止或提供适当的隔离(与使用应用程序域+策略相比)。正如您已经体验到的,执行的线程体/代码也不方便