views:

53

answers:

1

I have a C# application that uses the SerialPort object to establish a connection between another copy of the application running on another machine with BlueTooth capabilities. The program fairly constantly writes out some ascii data from the main machine, which is then received by the remote machine. The process goes fairly nicely (though not without some unwanted choppiness, but that's not what this question is about).

It goes nicely, that is, until I switch forms. The application has three main forms. When forms are switched, the old form is hidden and the new one is shown. The user uses the [X] toolbar button on form2 or form3 to close those forms and return to form1 (not my design decision. The project is based on a VB6 application and I haven't gotten much leeway to change its functionality).

When I go from form1 to form2, the serialPort suddenly starts reporting that it's closed. But... it continues to send data. That is, until I switch back to form1, at which point I get an InvalidOperationException telling me that the serialPort is closed, and can't write. The serialPort object is private, and form1 is the only form that touches it.

Just to be sure that was I wasn't going through and closing it somewhere on accident, I commented out every single serialPort.Close(); line in the project, and I'm still getting the same error. Something is causing the port to close (or report that it's closed) and i have no idea what. Furthermore, I can't open it back up, because it tells me that the port is currently in use.

I don't really know anything about BlueTooth or networking, so this is all the result of me bumbling around with little more than Google at my side. Maybe someone here knows the nuances of the SerialPort class enough to know what I'm doing wrong.

Thanks to all who can offer any help.

+2  A: 

It sounds like the SerialPort is being destroyed when the form closes because the form owns the object. Move it out of the form designer and into the application code and you should be fine.

Jon Purdy