2012-03-29 57 views
0

我希望我的C#WinForms应用程序在应用程序关闭或计算机关闭时运行一些代码(通过启动菜单,我知道如果他们拔下插件:P不会工作)。关闭WinForms应用程序并关闭计算机并运行代码?

基本上我有一些日志文件,我需要应用程序上传到FTP服务器关机。

我该怎么做?

+0

@BryanCrosby'AppDomain.CurrentDomain.ProcessExit + = new EventHandler(OnExit);'并使用窗体的FormClosing事件。 – 2012-03-29 04:41:52

回答

2

您可以通过拦截FormClosing事件来检测应用程序的关闭。

您可以使用SystemEvents检测寡妇关机,注销,暂停等。我建议不要使用系统事件,因为您可能没有足够的时间来执行上传到远程服务器(我认为默认值为3秒)。

+0

那么what'dya知道这实际上工作! – 2012-03-29 05:06:17

0

我认为你应该专注于关闭应用程序而不是关闭计算机,因为当计算机关闭时它将没有足够的资源&做工作的时间(上传和内容) 。当应用程序关闭时,使用应用程序的Form_Closing事件来完成工作,或者在应用即将关闭时使用Form_Closed事件触发。

Closing event Closed Event

+0

我需要关闭上传,因为用户没有与我的应用进行交互。它隐藏并在后台运行。 – 2012-03-29 04:42:59

+2

您链接到WPF事件。问题是关于WinForms。 – 2012-03-29 04:43:15

+0

请逐字回答。重要的是逻辑,算法 – 2012-03-29 04:51:13

1

勾住形式的FormClosing事件。无论何时关闭窗体,程序调用Close,Windows关闭等,此表单将在任何时候被解雇。

如果您需要知道您正在处理的是哪种退出, FormClosingEventArgs有一个CloseReason属性(类型CloseReason),它会告诉你为什么窗口正在关闭;它包含像UserClosing和WindowsShutDown这样的值。

虽然您可能无法在Windows关机时上传到FTP服务器。在Windows Vista和7中,在Windows保留强制终止它们的权利之前,应用程序只能关闭2秒。您最好在本地保存日志,并在下次启动应用程序时上传它。

+0

是的,我已经尝试使用'FormClosing'事件,虽然我从来没有想过只是在计算机启动备份时上传文件。我会尝试在文件的末尾添加一个小标记,让程序知道文件仍然需要上传。谢谢! – 2012-03-29 04:46:52

+0

哎呀,抱歉接受你的答案,然后不接受,但有人发现如何让它在关机/注销工作。 – 2012-03-29 05:05:52

+0

@ ryansworld10,有趣。因此,从SystemEvents上传文件比从FormClosing文件上传文件更好吗?我没有想到(尽管这当然有可能),所以我很想知道更多。我会认为2秒截止将适用于任何方式。 – 2012-03-29 12:00:02