Hello,

[Application Background}
My application is reading data from a PLC (programmable logic controller) using the MODBUS RTU protocol. The data is used to update digital and analog gauges on a form and also to make decisions of pass / fail based on tests of the data values. The nature of the application requires a continuous update of the data and the faster the update the better the application will be. For instance, if I need to know how long it takes for a vessel to get up to pressure, I am reading the analog input from the PLC at some interval and checking the pressure data. The resolution of my time calculation is basically equal to the time interval at which I read the data. I am currently using the System.Windows.Forms.Timer with an interval of 100 milliseconds. In the Timer_Tick event, I am reading the data from the PLC, updating my display elements (digital and analog gauges), and checking the data values for conditions pertinent to the particular test I am running. I use this method in timer objects on a couple different forms but the Timer_Tick events for all the forms do the same thing (reading data, updating display elements, and making decisions) at regular intervals. The data gets read into a a custom object that is public and can be accessed from the different forms. All forms update the display elements and make the decisions based on the same data object but they each read the same data separately

[Application Goals]
1) I would like to have the data read operation in only one place (not in multiple Timer_Tick events from multiple Timers, each on a separate form)
2) I would like to read the data continuously and as fast as the MODBUS protocol allows. Currently this takes 25 milliseconds of every 100 milliseconds that the Timer_Tick event fires. So I could have 4 times the speed and time resolution if I read data continuously.
3) I don't want any random UI thread operations causing a lag in the data update rate

[My Question]
Although I have never used a background worker thread, I believe this may be the case where it makes sense. But, before I invested the time learning to use the worker thread and modifying my currently working code, I wanted to ask if this is the best approach.
It seems like the background worker is mostly designed to perform a lengthy task outside of the UI thread. My application would require it to perform a short task (25 mS) over and over for the lifetime of the application continually updating the public data object (Mostly a collection of arrays containing integer data read from the PLC). Then, I would use the Forms.Timer, running much slower, to update the display elements by accessing the public custom data object.
Can the background worker thread be used in this manner?
Or, is there a better way?
Has anyone done this and have a little sample code they don't mind sharing?

Thanks in advance - TigerWereWolfMonkey