【发布时间】:2017-02-22 23:04:38
【问题描述】:
当 Windows 开始关闭时,我试图将一些信息放入数据库中。在我的应用程序中,我正在处理 Form.Closing 事件。但是,Windows 将继续并关闭,我的方法没有时间完成。有没有办法暂停关机足够长的时间来处理关机?这是我目前正在使用的方法。
Private Sub frmMain_Closing(sender As Object, e As FormClosingEventArgs) Handles Me.Closing
If e.CloseReason = CloseReason.WindowsShutDown Then
_logger.Debug("Hit frmMain_Closing1")
NewEvent(Events.SystemShutdownNormal)
System.Threading.Thread.Sleep(10000)
_logger.Debug("Hit frmMain_Closing 2")
End If
End Sub
每次我使用_logger.Debug("Hit...") 两次记录到日志文件时,只有第一次调用它时才会写入文件。我试过设置e.Cancel = True的方法,但是好像不行。
【问题讨论】:
-
调用是刷新到文件还是只写入缓冲区?
-
@BenVoigt Tbh,我不确定。那部分不是我写的。我只知道我们使用它来记录文件。这是我唯一的调用,但我不确定它背后的机制。
-
把
Sleep放在那里可能是个坏主意。 -
@AndrewMorton 是的,我已经删除了它。
-
阻止关机的日子已经过去了,但它根本不起作用。您可以调用 ShutdownBlockReasonCreate(),以便在应用程序拒绝退出时在 Windows 显示的屏幕上显示一条消息。你必须说服用户你正在做一些非常重要的事情,这样他就不会点击忽略按钮。就像我一样,如果你花的时间超过 5 秒,他会忽略它。