我通常把能(现实)不会超过一两秒钟到一个单独的任务的任何行动,是这样的:
public interface ITask
{
void ExecuteTask (ITaskExecutionContext context);
void AfterSuccess(ITaskExecutionContext context);
void AfterFailure(ITaskExecutionContext context);
void AfterAbortion(ITaskExecutionContext context);
}
我也有运行这样的任务的抽象:
public interface ITaskExecutor : IDisposable
{
void BeginTask(ITask task);
void TellTaskToStop();
}
一个本ITaskExecutor
的实施方式的使用BackgroundWorker
:
public class BackgroundTaskExecutor : ITaskExecutor
{
public void BeginTask(ITask task)
{
this.task = task;
worker = new BackgroundWorker();
worker.DoWork += WorkerDoWork;
worker.RunWorkerCompleted += WorkerRunWorkerCompleted;
worker.WorkerSupportsCancellation = true;
worker.RunWorkerAsync();
}
...
}
我非常依赖依赖注入和IoC来将东西连接在一起。在主持人然后我就打电话是这样的:
GoAndDontReturnUntilYouBringMeALotOfMoneyTask task = new GoAndDontReturnUntilYouBringMeALotOfMoneyTask(parameters);
taskExecutor.BeginTask(task);
取消/放弃然后按钮连线让他们告诉任务执行/任务中止。
它实际上比这里介绍的要复杂一点,但这是一般的想法。
在这里看到没有真正的参与感到惊讶。我也会对此感兴趣。 – Houman 2009-12-17 12:12:37