gpt4 book ai didi

vb.net - 有什么方法可以暂停 Windows 关闭,以便 forms.closing 方法可以完成吗?

转载 作者:可可西里 更新时间:2023-11-01 11:47:45 25 4
gpt4 key购买 nike

我正试图在 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的方法,但似乎没有用。

最佳答案

很抱歉造成这种误会。 简而言之,无法延迟或取消 Windows 关机。它将“很好地”挖掘所有进程以退出,然后通过并杀死所有没有退出的进程。 您可以延迟关闭,直到您的进程完成。为此,您需要使用 ShutdownBlockReasonCreate()

您应该 Hook WM_QUERYENDSESSION 消息,以便有机会做某事。您需要覆盖 WinProc,处理消息,然后调用基本 WinProc。看看https://msdn.microsoft.com/en-us/library/microsoft.win32.systemevents.sessionending(v=vs.110).aspx (向下滚动到备注。)

请记住,Windows 不会永远等待,但这会给您一些提前通知.. 希望您有机会做任何您需要做的事情。首先确定重要的事情的优先级,希望它在进程被杀死之前完成。

一旦你 Hook 了 WM_QUERYENDSESSION,你应该调用ShutdownBlockReasonCreate() 阻止关闭,直到您的应用程序完成关闭。完成后,调用 ShutdownBlockReasonDestroy()。有关详细信息,请参阅 this MSDN article (向下滚动到“必须阻止关闭的应用程序应使用新的关闭原因 API”)。

PInvoke 声明可以是 found herehere .

关于vb.net - 有什么方法可以暂停 Windows 关闭,以便 forms.closing 方法可以完成吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40027504/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com