我有以下代码,其中我试图处理大量的数据,并更新UI。我使用后台工作人员尝试过相同的事情,但我遇到了类似的问题。问题似乎是,我试图使用一个未在新线程上实例化的类(实际的错误是当前线程没有“拥有”该实例)。我的问题是,有没有一种方法可以在线程之间传递此实例以避免此错误?线程之间传递数据
DataInterfaceClass dataInterfaceClass = new DataInterfaceClass();
private void OutputData(List<MyResult> Data)
{
progressBar1.Maximum = Data.Count;
progressBar1.Minimum = 1;
progressBar1.Value = 1;
foreach (MyResult res in Data)
{
// Add data to listview
UpdateStatus("Processing", res.Name);
foreach (KeyValuePair<int, string> dets in res.Details)
{
ThreadPool.QueueUserWorkItem((o) =>
{
// Get large amount of data from DB based on key
// – gives error because DataInterfaceClass was
// created in different thread.
MyResult tmpResult = dataInterfaceClass
.GetInfo(dets.DataKey);
if (tmpResult == null)
{
// Updates listview
UpdateStatus("Could not get details",
dets.DataKey);
}
else
{
UpdateStatus("Got Details", dets.DataKey);
}
progressBar1.Dispatcher.BeginInvoke(
(Action)(() => progressBar1.Value++));
});
}
}
}
编辑:
DataInterfaceClass实际上definated并且它使用的功能之外创建的,但它是一个实例,而不是静态的。
我更新了问题,因为它确实出现DataInterfaceClass是静态的 - 事实并非如此。至于同时执行任务的数量,其目的仅仅是让进程在运行时更新UI(所以我不认为数据访问是同时发生的)。 – 2011-01-10 11:45:36