当我的应用程序需要紧急停止时,我可以致电Halt
或ExitProcess
立即终止它。但这不应该悄然发生;用户需要显示一条消息。因此,我查看了FatalAppExit
,但很惊讶它保持所有内容(计时器,线程)一直运行,直到用户关闭对话框。
据我所知,显示流程所拥有的UI需要流程继续运行。但是,UI不需要由我的进程拥有。 FatalAppExit
提供的对话似乎归Windows所有,即使它也保持流程运行。
FatalAppExit
的主要问题是它阻塞 - 我想要对话但不等待确认 - 所以我仍然无法立即终止。为了避免这种情况,我必须启动一个调用FatalAppExit
的线程,稍等一下然后终止进程。不喜欢那里的比赛条件。
我也可以启动一个自己的流程来显示消息,但是我宁愿不知道Windows是否可以处理它。
Windows是否提供同时终止和显示友好消息的方法?还有其他任何建议尽可能干净地处理这个问题吗?
答案 0 :(得分:1)
据我所知,这里唯一的选择是启动一个显示消息并立即终止的外部进程。您可以为此目的编写自己的程序(这可能是最简单的选项),或者您可以启动这样的批处理文件:
msg "%USERNAME%" %*
这会向给定用户发送一条消息(%USERNAME%是当前登录的用户)并使用传递给它的所有参数作为实际消息。
就个人而言,我会编写自己的程序,所以如果以后需要,我可以写一个日志条目并做其他的事情。
答案 1 :(得分:0)
您可以拥有全局变量,例如
var ShutdownMessage: string;
当您需要以错误结束时,请执行以下操作:
ShutdownMessage := 'Error occured';
Application.Terminate;
并在Application.Run之后的dpr文件中:
if ShutdownMessage <> '' then
MessageBox(0, PChar(ShutdownMessage), 'Error', MB_OK or MB_ICONERROR);
然后,在所有表格关闭并退出主循环后,将显示该消息。
或者,如果失败,您可以尝试在Application.Run之后引发异常 - 它应该传播到OS