SerialPort.GetPortNames()创建System.StackOverflowException

时间:2018-11-15 11:04:17

标签: c#

我已经在SAMD21J18A MCU上实现了Bootloader实现,基于 Atmel示例。我可以通过USB CDC连接到引导加载程序,它在Windows中被识别为COM端口,名称为AT91 USB to Serial Converter,没有任何问题。

COM端口工作正常,我制作了一个可运行的Windows Form C#程序,用于将代码下载到引导加载程序。在工作程序中,我只是手动设置了PortName

现在,我想使程序更加用户友好,并想制作一个ComboBox以使用户能够选择要使用的COM端口。因此,我正在调用GetPortNames函数:

string[] Ports = null;
Ports = SerialPort.GetPortNames();

只要我不插入我的引导程序,此方法就可以正常工作。
如果我附上例如。 FTDI设备,它会检测到该设备并将其添加到列表中,但是如果我附加了Bootloader("AT91 USB to Serial Converter"),则在System.StackOverflowException函数上会得到一个SerialPort.GetPortNames()

有人知道GetPortNames或USB CDC驱动程序出了什么问题吗?


感谢您的帮助mjwills:-)

完整的程序太大,无法在此处显示,因此我决定制作一个简短的程序来显示问题。但是,新的简短程序没有这个问题。因此,发现问题并非直接源于Visual Studio所引用的行。 无论如何,这是造成问题的函数:

    // Update comport pull-down list:
    private void UpdateComPortList()
    {
        string[] Ports = null;
        Ports = SerialPort.GetPortNames();

        int index = -1;
        string ComPortName = null;
        comboBoxComPort.Items.Clear();
        do
        {
            index += 1;
            comboBoxComPort.Items.Add(Ports[index]);
            //if(Properties.Settings.Default.comPort == Ports[index]) comboBoxComPort.SelectedIndex = index;
        }
        while (!((Ports[index] == ComPortName) || (index == Ports.GetUpperBound(0))));
        comboBoxComPort.Items.Add("update list...");
    }

如果我删除我现在已经注释的行,则该程序可以运行。 我认为问题在于,我尝试选择一个项目,同时添加项目...

0 个答案:

没有答案