GUI を作業エンジンから分離するツールがあります。それらは異なるプロジェクトです。おそらく、後でコンソール アプリケーションに使用したいと思います。BackgroundWorker の GUI からエンジン (DLL) を呼び出します。
_worker = new BackgroundWorker();
_worker.WorkerSupportsCancellation = true;
_worker.DoWork += DoWork;
_worker.RunWorkerAsync();
...
private void DoWork(object sender, DoWorkEventArgs e)
{
Engine.Engine engine = new Engine.Engine(someParams);
engine.Log += OnLog; //Here I receive Logging to display in GUI
engine.Start(); //Runs the logic
}
私が今欲しいのは、停止ボタンを実装することです。エンジンはかなり実行される可能性があり、データベースでトランザクションを作成します (停止をクリックするとロールバックしたい)。
backgroundworker を dll に渡し、CancellationPending をチェックすることでそれを行うことができます。それを行う別の方法はありますか?他のプロジェクトでコードを再利用したいので、Backgroundworker を渡したくありません...
何がいいでしょう:
エンジンには停止イベントがあり、コードで定期的にチェックできるグローバル フラグを「キャンセル」に設定します。このイベントは、GUI から発生させたいと考えています。
私の言いたいことを理解していただければ幸いです:-)
よろしくお願いします。