在Loaded Text文件中发生更改时刷新C#列表框

本文关键字:刷新 列表 Text Loaded 文件 | 更新日期: 2023-09-27 18:21:19

好的,我知道有人问过类似的问题,但我正试图让Listbox监视另一个程序更改的文本文件。我设置它来选择文件中的顶部行,并根据该行执行命令,然后删除顶部行。我只需要列表框在删除后刷新并读取新的顶部行,然后继续读取直到为空。我还让它监视串行端口是否打开。(我希望它只在串行端口关闭时循环)。我是C#的新手,所以我们非常感谢您的帮助。我当前的代码:

public partial class Form1 : Form
{
    List<string> myList = new List<string>();
    public Form1()
    {
        InitializeComponent();
        myList = System.IO.File.ReadLines("textfile").ToList();
        this.GPSCOM.DataSource = myList;
        GPSCOM.SelectionMode = SelectionMode.One;
        myList.FirstOrDefault();
        GPSCOM.SetSelected(0, true);
         if (serialPort.IsOpen)
        {
            return;
        }
        else
        {
             for(;;)
             {
                 switch ((string)GPSCOM.SelectedItem)
                 {
                     case "set1":
                         var lines = System.IO.File.ReadAllLines("textfile");
                         System.IO.File.WriteAllLines("textfile", lines.Skip(1).ToArray());
                         return;
                     case "set2":
                         var lines1 = System.IO.File.ReadAllLines("textfile");
                         System.IO.File.WriteAllLines("textfile", lines1.Skip(1).ToArray());
                         return;
                     case "set3":
                         var lines2 = System.IO.File.ReadAllLines("textfile");
                         System.IO.File.WriteAllLines("textfile", lines2.Skip(1).ToArray());
                         return;
                 }
            }
         }
    }

在Loaded Text文件中发生更改时刷新C#列表框

FileSystemWatcher将是您的最佳选择。

然而,我想问一下,将其他程序输出到其标准输出流并使用System.Diagnosis中的ProcessStartInfo重定向输出是否不方便。If将是一个更快、更直接的解决方案,因为数据可以在两个程序之间直接移动,而不是使用不太间接的文件存储方法。把中间人裁掉。

您最好使用FileSystemWatcher并捕获更改通知,而不是连续轮询文件的内容。