我有一个将 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 触发此事件。
我希望你能明白我的意思:-)
在此先感谢您的帮助!