我有在后台线程中运行的代码,需要定期检查用户是否要中止工作。
问题是如何在大部分 SOLID 环境中实现这一点。
ICancel
我注入每个类的接口。- 某处的公共静态成员
非常量静态似乎总是迟早会产生问题。另一方面,“标准”注入的数量正在稳步增长(ILogger、IPProgressReporter 等),因此像取消这样的简单操作可能是使用静态的不错选择。
还有其他/更好的方法吗?有人有经验分享吗?
我正在使用 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() {
// ??
}