So I figured out part of the problem. The following line of code in the SetDataTable function is not working. It gets executed in the thread but results in an untouched table. I thought this might be a synchronization problem with the table so I locked it for each thread, but no go. Still doesn't work.

dt.Rows.Add(dr)