我有一个单窗口WPF应用程序(Win8.1 / .net4.7),未处理Window.Closing-Event,对Window.Closed-Event的处理如下:
private void Window_Closed(object sender, EventArgs e)
{
Properties.Settings.Default.WinMainLocationX = this.Left; // ok
Properties.Settings.Default.WinMainLocationY = this.Top; // ok
Properties.Settings.Default.WinMain_size = new Size(this.Width, this.Height); // crucial setting
Properties.Settings.Default.WinMain_state = this.WindowState; // ok
Properties.Settings.Default.Save();
}
我每天一次通过包含C:\WINDOWS\system32\shutdown.exe /s /t 20
且之后没有任何内容的批处理文件关闭该应用程序(此时始终处于空闲状态)。这样,计算机即可正常关闭。通过命令行输入shutdown.exe
可以看到shutdown /?
的参数。
问题:每隔7或8天,窗口大小就会以一种使应用程序(在早上启动后)看起来像这样的方式损坏:
如何保护我的应用程序设置不受shutdown.exe
的干扰?
答案 0 :(得分:1)
我认为问题在于在最小化应用程序窗口的同时存储设置。在这种情况下,窗口的宽度和高度将为0。
您可以使用窗口的RestoreBounds
属性来获取其还原大小,而与当前状态无关:
Properties.Settings.Default.WinMainLocationX = this.RestoreBounds.Left;
Properties.Settings.Default.WinMainLocationY = this.RestoreBounds.Top;
Properties.Settings.Default.WinMain_size = new Size(this.RestoreBounds.Width, this.RestoreBounds.Height);
Properties.Settings.Default.WinMain_state = this.WindowState;
此问题的某些答案显示了使用WinAPI函数GetWindowPlacement
/ SetWindowPlacement
的另一种方法:
答案 1 :(得分:0)
添加Environment.Exit(0)
已解决了该问题。我可以想象问题的原因是两次访问Window.Closed-Handler。
private void Window_Closed(object sender, EventArgs e)
{
Properties.Settings.Default.WinMainLocationX = this.Left; // ok
Properties.Settings.Default.WinMainLocationY = this.Top; // ok
Properties.Settings.Default.WinMain_size = new Size(this.Width, this.Height); // crucial setting
Properties.Settings.Default.WinMain_state = this.WindowState; // ok
Properties.Settings.Default.Save();
Environment.Exit(0);
}