c# - C# 控制台应用程序在关闭前保存上次运行时
问题描述
我正在.Net Framework 4.6.1、Visual Studio 2013、Windows 10 x64 中开发 C# 控制台应用程序。Properties.Settings.Default.LastRuntime
每次应用程序关闭时,我都想在属性设置中保存上次运行时时间戳。当用户通过单击关闭 [X] 按钮、、、、Windows 关闭、注销事件来关闭它时,它应该可以Ctrl+C
工作Ctrl+Break
。这是我的代码。似乎没有任何工作。LastRuntime
属性未更新:
static void Main(string[] args)
{
string lrt = Properties.Settings.Default.LastRuntime;
Console.Write(lrt);
Console.ReadLine();
handler = new ConsoleEventDelegate(ConsoleEventCallback);
SetConsoleCtrlHandler(handler, true);
}
// Handle application termination
static bool ConsoleEventCallback(int eventType)
{
// Termination events: Ctrl+C = 0, Ctrl+Break = 1, Close/Cancel = 2, Logoff = 5, Shutdown = 6
if (new[] { 0, 1, 2, 5, 6 }.Contains(eventType))
{
Properties.Settings.Default.LastRuntime = DateTime.UtcNow.ToString("yyyy'-'MM'-'dd'T'hh':'mm':'ss");
Properties.Settings.Default.Save();
}
return false;
}
static ConsoleEventDelegate handler;
private delegate bool ConsoleEventDelegate(int eventType);
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetConsoleCtrlHandler(ConsoleEventDelegate callback, bool add);
解决方案
这里发生了很多事情,有很多与此事相关的 SO 帖子,所以我将尝试为您总结:
简而言之,应用程序范围的设置不能在运行时更改,而用户范围的设置被设计为在运行时读取/写入。
使用用户范围的设置
- 为什么我的应用程序设置没有得到持久化?(假设您已经使用用户设置)
如果您将程序集信息设置为自动生成任何版本号 (1.0.*),那么每次调试应用程序时版本号都会不同,因此每次都会创建一个新文件。
如果是这种情况,您将需要对设置文件执行升级:
Properties.Settings.Default.Upgrade()
- C# Settings.Default.Save() 不保存?确保您的代码中描述了更改(如果不重新启动)
Default.Reload
调用 Save 方法后需要调用:
推荐阅读
- python - Pandas 中每个单元格的自动数据类型转换
- typescript - TypeDoc 我如何为内部函数生成文档
- python - 如何使用 Python 在 MS Access 中更新或刷新表链接?
- powershell - 在 AzurePipelines 中自动化 Microsoft Teams 选项卡应用程序
- plsql - ORA-00933 运行时 plsql 抛出错误
- python - 如何在 Pygame 中运行游戏时制作不断变化的背景?
- php - 括号 json 配置文件修改为 PHP 支持
- swift - 如何解决奇怪的“文件句柄”问题?
- php - Laravel 中的 PHP 函数
- javascript - 构建 webpack 时出错:您可能需要适当的加载器来处理此文件类型