BackgroundWorkerなんらかの理由で代替を実装していますが、次のパブリック プロパティを実装する必要があります。
public bool CancellationPending { get; private set; }
public bool IsBusy { get; private set; }
public bool WorkerReportsProgress { get; set; }
public bool WorkerSupportsCancellation { get; set; }
彼らがどのような目的を果たしているのか、あなたは知っていると思いますBackgroundWorker。したがって、それらは異なるスレッドによってアクセス/変更される可能性があります。マルチスレッドのためにそれらを「保護」する方法が心配です。volatileとして宣言すれば十分だと思いましたvolatileが、自動プロパティには適用できません。
私は何をすべきか?これらのプロパティのプライベート フィールドを作成して宣言する必要がありますvolatileか? または、各およびブロックlock内で ingを使用する必要がありますか?getset
これは非常に一般的なシナリオであると思います-プロパティ(できれば自動プロパティ)をスレッドセーフにします。この例では、すべてのプロパティがアトミック型であることに注意してください。
編集:
必要なものを明確にするために、すべてのスレッドが常にプロパティの最新の値を読み取るようにする必要があります。これを参照してください: https://stackoverflow.com/a/10797326/1081467
volatile繰り返しますが、 、またはlocking 、または何か他のものを使用することをお勧めしますか? ..boolプロパティを使用する場合、原子性が保証されているため、2番目の問題 (最新の値を読み取る) だけが残っているため、これを正しく解決するにはどうすればよいですか? ? 非プリミティブ型のプロパティがある場合はどうなりますか? lockそれぞれgetとsetブロックにsを入れますか?