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

如何通过定时器更新DataGridView内容以同步外部CSV文件最新数据

问题解答

核心结论

你的假设确实不正确,dataGridView2.Update()和dataGridView2.Refresh()仅能触发控件的界面重绘,不会重新加载底层数据源,因此无法同步CSV文件的更新内容。

问题原因

你仅在窗体初始化阶段读取了一次CSV文件内容并绑定到DataGridView,后续定时器触发时并没有重新读取更新后的CSV文件,内存中的数据源始终是第一次加载的旧数据,仅刷新控件界面自然不会有变化。

修复方案

  1. 将读取CSV并绑定数据源的逻辑抽取为独立公共方法,窗体加载和定时器触发时都调用该方法
  2. 替换定时器事件中原有的重绘逻辑,改为调用重新加载CSV的方法
  3. 新增异常捕获逻辑,避免其他程序写入CSV时文件被独占导致读取报错

修改后参考代码

using System.IO;
using System.Globalization;
using CsvHelper;

namespace ST_4
{
    public partial class Watchlist : Form
    {
        string fileName;
        string AppDataPath;
        string MQFiles;
        public Watchlist()
        {
            InitializeComponent();
            // 窗体加载时首次加载CSV
            LoadWatchlistCsv();
        }

        public void timer2_Tick(object sender, EventArgs e)
        {
            // 定时器触发时重新读取CSV并绑定
            LoadWatchlistCsv();
        }

        // 抽取的独立加载方法
        public void LoadWatchlistCsv()
        {
            AppDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData);
            MQFiles = Path.Combine(AppDataPath, "Files");
            string csvPath = Path.Combine(MQFiles, "Watchlist.csv");
            
            try
            {
                List<ElementsWatch> records;
                using (var reader = new StreamReader(csvPath))
                using (var csv = new CsvReader(reader, CultureInfo.InvariantCulture))
                {
                    records = csv.GetRecords<ElementsWatch>().ToList();
                }
                // 先清空旧数据源再绑定新数据,避免缓存问题
                dataGridView2.DataSource = null;
                dataGridView2.DataSource = records;
            }
            catch (IOException)
            {
                // 文件被占用时跳过本次刷新,避免程序崩溃
                // 调试阶段可在此处添加日志或者弹窗提示排查问题
            }
        }
    }
}

注意事项

  • 请确认你的timer2控件已设置Enabled = true,并配置了合适的Interval属性(单位为毫秒,比如1000代表每秒刷新一次)
  • 没有高频刷新需求的话建议适当调大Interval值,减少不必要的磁盘IO开销
  • 代码中使用Path.Combine拼接路径,避免手动拼接斜杠导致的路径错误问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:54:04