You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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; }
    }
    
  • 第二步:配置自动存盘触发逻辑,两种方式配合避免漏存
    1. 操作触发存盘:绑定所有TextBox的LostFocus事件、DataGridView的CellEndEdit事件,每次用户完成一个输入项的编辑后,就将当前所有录入数据序列化后写入本地临时文件
    2. 定时触发存盘:添加一个Timer控件,设置1-2分钟的触发间隔,定期覆盖写入最新的临时数据,避免用户长时间连续编辑未触发操作事件导致漏存
      临时文件可存储在Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData)下的应用专属目录,文件名用当日日期命名(如20240520_prod_temp.json),避免文件冲突
  • 第三步:新增启动自动恢复逻辑
    应用启动时优先检查当日对应的临时文件是否存在,若存在则直接反序列化读取数据,自动将字段值回填到对应TextBox、给DataGridView绑定读取到的列表数据即可
  • 第四步:配置自动清理逻辑
    应用每次启动时遍历临时文件目录,删除所有日期早于当日的临时文件,完全不需要手动维护,不会产生冗余垃圾

可选优化点

  • 若担心用户误改明文JSON文件,可在序列化后做简单的Base64编码,读取时解码即可,也可加CRC校验位,校验不通过时提示用户是否重置数据
  • 若单条录入数据量极小,也可选择将序列化后的内容存入系统注册表当前用户节点,无需管理文件系统

内容的提问来源于stack exchange,提问作者Steven Noppe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 08:06:04