I have an application that needs to display a couple of lists to the user and
I would like most of the work to be done by a background task. The data
displayed is read only. Because of the other work being done in the UI, I
need to limit as much as possible the UI thread work load when it does not
have the focus. So, how best do this?

Option 1 (And this takes too long in the UI tread): The background (bg) task
does all the sql and updates the data table. When the bg task has an update,
it signals the UI. The UI task takes a copy of the data table and binds it to
the data grid. Normal object locking is used.

Option 2: Modify option one to just push the update rows across the task
boundary. I know this will be better, but I donâ??t know if itâ??s the best
approach.

Option 3: Build an object that uses the property changed event and have the
binding source bind to the type. This works just fine, but the data grid
update is not smooth (aka the screen flickers) so it has to be rejected.

Option 4: Bind a synchronized list to the data grid view and have the bg
thread signal the UI thread when the data grid view should be invalidated.

In my simple case, Option 4 looks the cleanest since I donâ??t need any of the
features (row states, relationships) of the data table object.

Thanks for the comments and other ideasâ?¦Chuck