我有以下代碼,其中我試圖處理大量的數據,並更新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