Please see my comment to Solution 1.
You are trying to simulate threads in a most naive and dangerous way, instead of using threads in a million times simpler way.
All the hardware control, as well as communication, networking, performing any linear-logic lengthy task and a lot of other things should be programmed in a separate thread.
Now, it looks like you ignored my advice to your very first question. You are mixing up UI and hardware control and data acquisition. You do need isolate UI from other functionality. The problem is not classes, the problem is layers. I cannot really teach how to do it if you have no idea in one short answer.
Let's come back to threads. You need to perform polling and populate some UI, right? One problem is: you cannot call anything related to UI from non-UI thread. Instead, you need to use the method
Invoke
or
BeginInvoke
of
System.Windows.Threading.Dispatcher
(for both Forms or WPF) or
System.Windows.Forms.Control
(Forms only).
You will find detailed explanation of how it works and code samples in my past answers:
Control.Invoke() vs. Control.BeginInvoke()[
^],
Problem with Treeview Scanner And MD5[
^].
See also more references on threading:
How to get a keydown event to operate on a different thread in vb.net[
^],
Control events not firing after enable disable + multithreading[
^].
—SA