我已經看到了幾個線程,介紹如何從後臺工作人員更改UI元素,但我的問題是與相反的過程。我有一個ListView,其中包含一些複選框旁邊的項目。我有一個背景工作者應該將數據寫入到ListView中選中的項目的csv中。我的問題是我無法訪問存儲在我的主窗體上的ListView.CheckedItems列表。有沒有一種優雅的方式來從後臺工作者訪問這些數據,還是我必須使用一些糟糕的解決方法,將列表存儲在EventArgs參數的參數中?C# - 如何從背景工作線程訪問表單控件中的信息
作爲一個例子,下面的代碼將創建一個目錄爲每一個檢查條目;如果沒有跨線程問題:
private void WriteToCSV(Dictionary<string,PointPairList> curves)
{
foreach (KeyValuePair<string, PointPairList> entry in curves)
{
if (SaveListView.CheckedItems.ContainsKey(entry.Key))
{
string curveDir = Path.Combine(this.dirString, entry.Key);
if (!Directory.Exists(curveDir))
{
Directory.CreateDirectory(curveDir);
}
}
}
}
所以,問題是,如果這個方法是從BackgroundWorker的調用, 「SaveListView」是主窗體上的列表視圖,如何在不引發交叉線程異常的情況下訪問SaveListView?
謝謝你可以做的任何事情。
另請參閱:http://stackoverflow.com/questions/142003/cross-thread-operation-not-valid-control-accessed-from-a-thread-other-than-the –