3

为简单起见,我的 Delphi XE 应用程序包含负责根据某些条件生成文件的对象:一个对象可以生成文本文件,其他对象(从前者继承)可以生成 XML 或 HTML 文件等等。 .它们都有一个共同的祖先,但不运行在一个线程上!

我现在正在尝试添加一种方法来在用户点击取消按钮时取消整个生成过程。问题是我没有任何东西可以让它工作。最基本的操作是if user_canceled then halt_process在整个生成过程中到处添加 A LOT,但我觉得这不是最佳解决方案。

我的问题是,是否有一些更聪明的方法可以做到这一点?或者您可能对重构我的代码有任何建议,以便将来在需要添加更多生成代码(以及因此取消测试)时可以更好地集成此添加?

4

2 回答 2

2

如果需要取消进程,您将需要添加手动检查,因为无法取消它并使程序处于有效状态。编译器/程序只是不知道哪些操作是原子的,哪些不在您的应用程序逻辑中。

例如

OpenFile(...);  //<- if program halts anywhere before CloseFile you have the file locked
...
CloseFile;

最佳解决方案很大程度上取决于您现有的设计。在排队操作的简单情况下,A -> B -> C -> D如果您将其包装到线程中并if Terminated then Exit;在操作之间添加(当然如果有的话,可以正确释放临时对象)。

于 2012-06-26T12:44:06.227 回答
0

我相信实现取消的一个好方法是使用 EAbort。只要您最终在尝试中打开和关闭文件,提高 EAbort(例如单击按钮)将使您很好地摆脱一长串操作。它不应该工作,但它确实有效。

于 2012-06-28T12:42:25.873 回答