私は通常(現実的に)別のタスク、のようなものの中に1秒か2秒以上かかることができます任意のアクション置く:私もこのようなタスクを実行するための抽象化を持って
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
の実装の1つは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