我有一个 Windows 窗体应用程序,它正在数据库中写入一堆东西。现在前段时间我在询问如何确保在关闭 Windows 窗体之前完成所有请求(写入数据库)的解决方案。
我这样做的原因是因为它将是一个自动关闭的独立应用程序,因此我需要能够完成我所有的数据库写入和读取,并确保在我关闭表单时所有的工作完成。
在我尝试此解决方案之前,由于表单关闭,我在写入数据库时遇到了断开连接的问题。
现在的问题是,当我有一个关闭过程时,我的 Windows 窗体应用程序不会关闭,所以过了一段时间它只是切断了我不需要的电力。
这是代码,请告诉我它有什么问题?当程序确定没有任务在后台运行时,我需要关闭表单。
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
// this.Visible = false; // optional
// this.ShowInTaskbar = false; // optional
Task db = Task.Factory.StartNew(() => DBUpdate());
Task.WaitAll(db);
if (this.shutdownRequested)
Process.Start("shutdown.exe", "-s");
}
protected override void WndProc(ref Message ex)
{
if (ex.Msg == WM_QUERYENDSESSION)
{
Message MyMsg = new Message() { Msg = WM_CANCELMODE };
base.WndProc(ref MyMsg);
this.shutdownRequested = true;
} else {
base.WndProc(ref ex);
}
}
编辑:
我刚刚意识到,当我单击X按钮并开始关闭表单时,这是有效的,但是当 pc 进入关机阶段时,它就不行了。任何的想法?也许我需要更改其他事件而不是FormClosing?还有一件事。我已将应用程序进程的优先级保存为实时进程。