私はBackgroundWorker
から継承したクラスを使用して、リモートサーバー上の特定の処理を行います。このクラスのプロパティを追加して、ジョブの完了に必要な情報を保存しました。例:BackgroundWorkerから派生したクラス内でロック文が必要ですか?
public class GenerateFileWorker : System.ComponentModel.BackgroundWorker
{
public string LocalFileName { get; set; }
public string Username { get; set; }
public string Password { get; set; }
public GenerateFileWorker() {}
public GenerateFileWorker(string username, string password, string localFileName)
{
Username = username;
Password = password;
LocalFileName = localFileName;
}
protected override void OnDoWork(DoWorkEventArgs e) {
// ...
}
私はlock
がクラス外のオブジェクトに安全にアクセスするために必要であることを知っていますが、その内部はどうですか? OnDoWork()
の現在のインスタンスのプロパティにアクセスするときに必要ですか?
クラスの内部が別のスレッドでアクセスしようとしているときに、クラス外の誰かがプロパティを操作しようとするとどうなりますか?コードがクラスの内部にあるのか外部にあるのかについては何もしないようにロックを設定する必要があるかどうか – litelite
どうやってそれらのプロパティを使用しますか?あなたはコンストラクタの外にどこにでも書きますか? – Evk
'クラス外のオブジェクトに安全にアクセスするにはロックが必要です。 'いいえ、複数のスレッドから可変状態にアクセスしようとしているときはいつでも' lock'が必要です(または少なくとも共有状態へのアクセスを同期させる多くの方法の1つです)。それはあなたがデータにアクセスするクラスとは何の関係もありません。 – Servy