0

好的,我知道有人问过类似的问题,但是我试图让 Listbox 监视由另一个程序更改的文本文件。我设置它以选择文件中的顶行,并基于该行执行命令,然后删除顶行。我只需要在删除后刷新列表框并阅读新的顶行并继续阅读直到为空。我也让它监视serialPort是否打开。(我希望它仅在串行端口关闭时循环)。我对 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;
                 }
            }
         }

    }
4

2 回答 2

0

FileSystemWatcher 将是您最好的选择。

但是,我想问一下,将其他程序输出到其标准输出流并使用 System.Diagnosics 中的 ProcessStartInfo 重定向输出是否不方便。如果数据可以在两个程序之间直接移动,而不是使用不太间接的文件存储方法,这将是一个更快、更直接的解决方案。照原样切掉中间人。

于 2013-07-06T01:44:43.200 回答
0

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

于 2013-07-06T00:54:13.973 回答