アプリケーションスレッドを安全にしようとしています。私は手を上げて、糸脱毛に慣れていないことを認めているので、どのように進めればよいかわかりません。
簡略化したバージョンを提供するために、私のアプリケーションにはリストが含まれています。
- ほとんどのアプリケーションはこのリストにアクセスし、それを変更しませんが、リストを介して列挙する場合があります。これはすべてUIスレッドで発生します。
- スレッド1は、リストに追加および削除するアイテムを定期的に検索します。
- スレッド2はリストを列挙し、追加情報でアイテムを更新します。これはスレッド1と同時に実行する必要があり、数秒から数時間かかる場合があります。
最初の質問は、誰もがこれに対して推奨されるストラジーを持っているかどうかです。
次に、メインアプリケーションが使用するリストのコピーを個別に作成し、何かが更新/追加または削除されたときに定期的に新しいコピーを取得しようとしましたが、これは機能していないようです。
私は私のリストとコピーを持っています......
public class MDGlobalObjects
{
public List<T> mainList= new List<T>();
public List<T> copyList
{
get
{
return new List<T>(mainList);
}
}
}
copyListを取得し、それを変更し、メインリストを保存し、アプリケーションを再起動し、メインリストをロードして、コピーリストをもう一度見ると、変更が存在します。コピーリストはまだメインリストを参照しているように見えるので、私は何か間違ったことをしたと思います。
違いがあるかどうかはわかりませんが、クラスの静的インスタンスを介してすべてにアクセスします。
public static MDGlobalObjects CacheObjects = new MDGlobalObjects();