C# Forms应用防止电脑关机丢失表单临时数据的最佳实践
C# WinForm 生产录入数据防丢失最简实现方案
核心实现思路
使用.NET原生JSON序列化能力将临时数据存入本地文件,无需数据库、无额外依赖,完全满足当日临时存储、过期自动清理的需求。
具体实现步骤
- 第一步:定义统一的临时数据存储模型,封装所有录入字段
把所有TextBox的输入值、DataGridView绑定的数据源全部整合到一个可序列化的类中,示例代码如下:using System.Collections.Generic; using System; // 总临时数据容器 public class DailyProductionTemp { // 对应TextBox类录入项,按实际业务字段扩展 public string WorkOrderNo { get; set; } public string OperatorId { get; set; } public DateTime ShiftTime { get; set; } // 对应DataGridView的数据源,直接绑定到控件即可 public List<ProductionRecord> GridData { get; set; } = new List<ProductionRecord>(); } // DataGridView行对应的实体类,按实际表格字段扩展 public class ProductionRecord { public string ProductSku { get; set; } public int QualifiedCount { get; set; } public int DefectiveCount { get; set; } public string Remark { get; set; } } - 第二步:配置自动存盘触发逻辑,两种方式配合避免漏存
- 操作触发存盘:绑定所有TextBox的
LostFocus事件、DataGridView的CellEndEdit事件,每次用户完成一个输入项的编辑后,就将当前所有录入数据序列化后写入本地临时文件 - 定时触发存盘:添加一个
Timer控件,设置1-2分钟的触发间隔,定期覆盖写入最新的临时数据,避免用户长时间连续编辑未触发操作事件导致漏存
临时文件可存储在Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)下的应用专属目录,文件名用当日日期命名(如20240520_prod_temp.json),避免文件冲突
- 操作触发存盘:绑定所有TextBox的
- 第三步:新增启动自动恢复逻辑
应用启动时优先检查当日对应的临时文件是否存在,若存在则直接反序列化读取数据,自动将字段值回填到对应TextBox、给DataGridView绑定读取到的列表数据即可 - 第四步:配置自动清理逻辑
应用每次启动时遍历临时文件目录,删除所有日期早于当日的临时文件,完全不需要手动维护,不会产生冗余垃圾
可选优化点
- 若担心用户误改明文JSON文件,可在序列化后做简单的Base64编码,读取时解码即可,也可加CRC校验位,校验不通过时提示用户是否重置数据
- 若单条录入数据量极小,也可选择将序列化后的内容存入系统注册表当前用户节点,无需管理文件系统
内容的提问来源于stack exchange,提问作者Steven Noppe
相关产品推荐
相关产品推荐

