【发布时间】:2009-05-06 20:11:26
【问题描述】:
还是不行!
我有一个相当简单的应用定时器程序。该程序将启动用户选择的(从文件对话框)可执行文件,然后在用户指定的分钟数后终止该过程。在测试过程中我发现当我调用 Process.Kill() 方法并且应用程序被最小化到系统托盘时发生了崩溃。
有问题的可执行文件是我经常使用的 Frap.exe,这也是我首先编写应用计时器的原因。我总是尽量减少托盘的碎片,这就是崩溃发生的时候。
我对 Kill() 的使用非常简单......
while (true)
{
//keep checking if timer expired or app closed externally (ie. by user)
if (dtEndTime <= DateTime.Now || p.HasExited)
{
if (!p.HasExited)
p.Kill();
break;
}
System.Threading.Thread.Sleep(500);
}
在寻找以编程方式关闭外部应用程序的替代方法时,我发现只有 Close() 和 Kill()(CloseMainWindow 对我一点帮助都没有)。我尝试使用 Close(),它可以在应用程序最小化托盘的情况下工作。如果应用程序被最小化, Close() 不会导致崩溃,但应用程序保持打开和活动状态。 我在一些关于关闭外部应用程序的帖子中注意到的一件事是评论:“我个人会尝试找到一种更优雅的方式来关闭它。”在堆栈流中找到的THIS 线程中制作(对约翰没有冒犯)。问题是,我在一些网站上遇到过这样的 cmets,但没有尝试过优雅或优雅(或无崩溃!!)的方法。
有什么建议吗?
经历的崩溃并不一致,我几乎无法提供细节。当我收到消息时,我无法使用 VS2008 进行调试 - 无法调试崩溃的应用程序(或类似的东西),并且取决于我当时运行的其他程序,当调用 Kill() 时,其中一些也会崩溃(还有程序仅在托盘中运行)所以我认为这是与系统托盘特别相关的某种问题。
【问题讨论】:
-
您是否尝试将 ALT+F4 发送到应用程序?
-
没有。老实说,我不知道该怎么做。我所做的唯一进程间通信是在我自己的应用程序之间使用管道和端口(套接字)。我会调查的,但如果你有什么具体的,请随意......
标签: c#