Well from a quick glance at your code I'm guessing your CMD_Exited method is also being run from another thread so you need to handle it in the same way that you handle the Async_Data_Received method (i.e by using Invoke).