SerialPort.GetPortNames多次返回相同的端口

时间:2015-10-28 20:40:42

标签: c# .net serial-port

class ViewController3: UIViewController, UITableViewDataSource, UITableViewDelegate {

    var Person_data = [Person]()

    override func viewDidLoad() {
        super.viewDidLoad()

        let tb: UITableView = UITableView(frame: CGRect(x: 10, y: 50, width: 200, height:600), style: UITableViewStyle.Plain)

        tb.dataSource = self
        tb.delegate = self
        super.view.addSubview(tb)

        fetch_data()
    }


        func tableView(tableview: UITableView, numberOfRowsInSection section: Int) -> Int {
            let rows = Person_data.count
            return rows
        }


       func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
        {  
            let cell: UITableViewCell = UITableViewCell()
            cell.textLabel?.text = Person_data[indexPath.row].name
            return cell
        }

    override func viewWillAppear(animated: Bool) {
        super.viewWillAppear(animated)
        fetch_data()      
      // reload at this point

    } 


    func fetch_data() {

       let tb_fetchRequest = NSFetchRequest(entityName: "Person")
        do {

            let tb_fetchResults = try my_moc.executeFetchRequest(tb_fetchRequest) as? [Person]
            Person_data = tb_fetchResults!
        } catch let error as NSError {
                print("request error: \(error)")
            }

        }
    }

返回以下数组:

SerialPort.GetPortNames();

通常只有每个名字一次。解决这个问题非常容易,但有谁知道为什么会这样做?

1 个答案:

答案 0 :(得分:2)

如果没有关于您的特定环境的更多信息,包括机器配置和注册表信息,则无法回答。但很可能(不满意的)答案是GetPortNames()只是尽可能地利用可用的信息做到最好。

即。它检查注册表以查看存在哪些端口并返回它们的列表。在某些情况下,多个设备可能会重复使用相同的COM端口号,甚至可能多次使用同一设备(取决于驱动程序),导致端口号在注册表中多次列出。

实际上,在某些情况下,您可能会返回一个目前甚至无效的COM端口名称。即某些设备在某个时间确实存在,但已被删除/断开连接等。并且不再可用。

这是一个经典的“垃圾进入,垃​​圾出局”问题。

有关该问题的相关信息,您可能希望查看这些Stack Overflow问题:

GetPortNames() returns stale data/Remove stale comport entries in Windows?
SerialPort.GetPortNames() is wrong
SerialPort.GetPortNames() behavior