私はBackgroundWorkerを使っていつもIEnumerator<T> list
を処理する小さなアプリケーションを持っています。反復処理中にListItemをリストに追加する方法(C#)
コードは基本的にこのような:
while(true){
foreach(T item in list){
// Process each item and send process
// Add an object in child List (List<T1> item.Result)
}
Thread.Sleep(500);
}
今、私はIEnumeratorを直接追加しますこれ、ボタンやテキストボックスを持っています。
問題は、ボタンを追加した後、バックグラウンド作業者は現在処理中のアイテムを処理し続けますが、そのアイテムを終了した後は停止するということです。それは続かない。
項目を背景に影響を与えずにリストに安全に追加するにはどうすればよいですか?バックグラウンドワーカーの横にもアイテムにオブジェクトを追加します。このための解決策は何でしょうか?
はおそらくsimultaniouslyコードの両方の場所から共有「リスト」変数にアクセスしないようにする「ロック」キーワードを使用する必要が
はい、私は列挙子を変更しません。私が編集しているのはitem.Resultです。 itemListには影響しません。私がこれをコピーすると。結果は変更されません。 – DucDigital
@Duc - リストのコピーには元のオブジェクトと同じオブジェクトへの参照が含まれているので、コピー内のオブジェクトを変更した場合は元のコピーを変更します(Tは値型ではないと仮定します)。あなたは反復中にリストに追加することについて尋ねました。これは、列挙子の基になるコレクションを変更し、それを無効にし、次回の移動時に例外をスローします。 – tvanfosson
これはうまく動作します。ありがとう、tvanfosson – DucDigital