Problem with SerialPort

后端 未结 6 708
自闭症患者
自闭症患者 2020-12-15 00:08

I\'m working with SerialPort to communicate (read only) with barcode reader.

I\'ve installed driver to operate with the reader as if it was connected via Com-port,

6条回答
  •  挽巷
    挽巷 (楼主)
    2020-12-15 00:52

    Sigh, this an age old problem with USB serial port emulators. Serial ports are devices that date from the stone age. They used to be screwed into the bus, no way to remove them while a program is using it without drawing sparks and billowing smoke. Stone age also includes the lack for any kind of plug-and-play support so that a program could detect that the device is suddenly gonzo.

    Unfortunately, the majority of the crummy device drivers that emulate them just make them disappear, even though a program has the port opened. This works just about as well as jerking a flash drive out of the socket when Windows is writing files to it. There's a background worker thread that waits for notifications from the device driver so that it can generate the DataReceived, ErrorReceived and PinChanged events. That thread suffers a heart attack when the device suddenly disappears. You can't catch that, it is a thread that was started by the SerialPort class, you can't wrap it with try/catch.

    By popular demand, Microsoft did something about it in .NET 4.0. Not actually sure what happens in that release. If you're stuck on an earlier release, the only reasonable thing you can do is tape a sign next to the USB slot: "Don't remove while in use!" Which inevitably makes somebody unplug the device at least twice to see what happens. After which they get bored with that and leave you in peace.

    The very unreasonable workaround is an app.exe.config file with this content:

    
    
      
        
      
    
    

    Don't use it.

提交回复
热议问题