Multi-threading is scalable, and will allow your UI to maintain its responsivness while doing very complicated things in the background. I don't understand where other responses are acquiring their information on multi-threading.
When you shouldn't multi-thread is a mis-leading question to your problem. Your problem is this: Why did multi-threading my application cause serial / ethernet communications to fail?
The answer to that question will depend on the implementation, which should be discussed in another question. I know for a fact that you can have both ethernet and serial communications happening in a multi-threaded application at the same time as numerous other tasks without causing any data loss.
The one reason to not use multi-threading is:
- There is one task, and no user interface with which the task will interfere.
The reasons to use mutli-threading are:
- Provides superior responsiveness to the user
- Performs multiple tasks at the same time to decrease overall execution time
- Uses more of the current multi-core CPUs, and multi-multi-cores of the future.
There are three basic methods of multi-threaded programming that make thread safety implemented with ease - you only need to use one for success:
- Thread Safe Data types passed between threads.
- Thread Safe Methods in the threaded object to modify data passed between.
- PostMessage capabilities to communicate between threads.