ユーザーが作業を中止するかどうかを定期的に確認する必要があるバックグラウンド スレッドでコードを実行しています。
問題は、ほとんどSOLID環境でこれを実装する方法です。
ICancel
すべてのクラスに挿入するインターフェイス。- どこかの public static メンバー
非定数静的は、遅かれ早かれ常に問題を引き起こすようです。一方、「標準」のインジェクション (ILogger、IProgressReporter など) の数は着実に増加しているため、cancel のような単純なものは static を使用するのに適している可能性があります。
他の/より良い方法はありますか? 誰でも共有する経験がありますか?
私は WPF と C# を使用していますが、質問は一般的です。
次に例を示します。
// this code is in some model assembly
public class BackgroundWorkFactory {
public IDoingBackgroundWork Worker {
get { return new DoingBackgroundWork(new Whatever()); }
}
internal class DoingBackgroundWork : IDoingBackgroundWork {
public DoingWork(IWhatever whatever) {
mWhatever = whatever;
}
public void WorkThatCanBeCanceled() {
while (!Canceled && somethingElse) {
mWhatever = whatever.DoSomthingElseThatMightAlsoAllowCancel();
...
}
}
}
// This code is in the GUI Assembly
public void StartWork() {
IDoingBackgroundWork work = factory.Worker;
Thread t = new Thread(work->WorkThatCanBeCanceled());
t.Start();
}
public void StopWork() {
// ??
}