0

わかりました、c# では、リストボックスに他のプログラムによって取り込まれたテキストファイルの内容を取得して内容を一覧表示する方法をいくつか試しました。そして、特定の条件が真の場合、テキストファイルのリストボックスの最初の項目の内容に基づいてプログラムを実行します。プログラムがコースを実行した後、テキストファイルから実行行が削除されます(これが私のプログラムが続行されない場所です)。リストボックスでテキストファイルを更新またはリロードし、内容に基づいてプログラムを再度ロードしますテキストファイルの最初の行。

リストボックスを使用することが道ではない場合、私はすべて耳を傾けています。キューにあるものを表示できるようにしたいだけです。プログラムの残りの部分は問題なく動作しますが、この部分だけではわかりません。FileWatcher と bindsource を使用しようとしましたが、何か間違っている可能性があります。私はC#に非常に慣れていないので、助けていただければ幸いです。必要に応じて、コードのスニペットを取得してここに表示できます。ありがとう。

編集:これが私の現在のコードの一部です。私はさまざまなアプローチを試みてきたので、現在のところ非常に解体されています。まだ何かをロードするようにセットアップしていませんが、テキストファイルが変更されたときに更新しようとしています。

public partial class Form1 : Form
{


    private FileSystemWatcher _watcher;
   List<string> myList =  new List<string>();

    public Form1()
    {
        InitializeComponent();

        myList = System.IO.File .ReadLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt").ToList();

        BindingSource binding = new BindingSource(myList.ToList(), null);
        GPSCOM.DataSource = binding;
        _watcher = new FileSystemWatcher();
        _watcher.Path = Path.GetDirectoryName("C:\\inetpub\\wwwroot\\imomo");
        _watcher.Filter=Path.GetFileName("C:\\inetpub\\wwwroot\\imomo\\Orders.txt");
        _watcher.SynchronizingObject = GPSCOM;
        _watcher.EnableRaisingEvents = true;
        _watcher.Changed += new FileSystemEventHandler(fileSystemWatcher1_Changed);
        _watcher.Error += new ErrorEventHandler(GPSCOMerror);
        GPSCOM.SelectionMode = SelectionMode.One;
        //myList.FirstOrDefault();
         if (serialPort.IsOpen)
        {
            return;
        }
        else
        {
            for (; ; )
            {
                switch ((string)GPSCOM.SelectedItem)
                {
                    case "task1":

                        var lines = System.IO.File.ReadAllLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt");
                        System.IO.File.WriteAllLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt", lines.Skip(1).ToArray());
                        //BindingSource binding = new BindingSource(myList.ToList(), null);

                        myList = System.IO.File.ReadLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt").ToList();
                        GPSCOM.DataSource = binding;
                        GPSCOM.SelectionMode = SelectionMode.One;
                        myList.FirstOrDefault();
                        GPSCOM.SetSelected(0, true);
                        GPSCOM.Refresh();

                        return;
                    case "task2":

                        var lines1 = System.IO.File.ReadAllLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt");
                        System.IO.File.WriteAllLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt", lines1.Skip(1).ToArray());
                        //BindingSource binding = new BindingSource(myList.ToList(), null);

                        myList = System.IO.File.ReadLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt").ToList();
                        GPSCOM.DataSource = binding;
                        GPSCOM.SelectionMode = SelectionMode.One;
                        myList.FirstOrDefault();
                        GPSCOM.SetSelected(0, true);
                        GPSCOM.Refresh();

                        return;
                    case "Task3":

                        var lines2 = System.IO.File.ReadAllLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt");
                        System.IO.File.WriteAllLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt", lines2.Skip(1).ToArray());
                        //BindingSource binding = new BindingSource(myList.ToList(), null);

                        myList = System.IO.File.ReadLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt").ToList();
                        GPSCOM.DataSource = binding;
                        GPSCOM.SelectionMode = SelectionMode.One;
                        myList.FirstOrDefault();
                        GPSCOM.SetSelected(0, true);
                        GPSCOM.Refresh();

                        return;
                    case "":
                        return;
                }
            }
            }

    }

private void GPSCOM_SelectedIndexChanged(オブジェクト送信者, EventArgs e) {

        BindingSource binding = new BindingSource(myList.ToList(), null);

        myList = System.IO.File.ReadLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt").ToList();
      GPSCOM.DataSource = binding;
        GPSCOM.Refresh(); 
    }        
    private void fileSystemWatcher1_Changed(object sender, FileSystemEventArgs e)
    {

        BindingSource binding = new BindingSource(myList.ToList(), null);

        myList = System.IO.File.ReadLines("C:\\inetpub\\wwwroot\\imomo\\Orders.txt").ToList();
       GPSCOM.DataSource = binding;
        GPSCOM.Refresh();


         }
    }
4

1 に答える 1

0

このようなものが必要ですか?

public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            listBox1.DataSource = TaskQue.GetTasks();
        }

        private void Execute(object sender, EventArgs e)
        {
            string task = TaskQue.Pop();
            //execute task;
            listBox1.DataSource = TaskQue.GetTasks();
        }

        private void AddTask(object sender, EventArgs e)
        {
            TaskQue.Push(textBox1.Text);
            listBox1.DataSource = TaskQue.GetTasks();

        }
    }

    public class TaskQue
    {
        public static string txtPath = "C:/a.txt";

        public static string Pop()
        {
            StreamReader sr = new StreamReader(txtPath);
            string result = sr.ReadLine();
            string remaining = sr.ReadToEnd();
            sr.Close();
            StreamWriter sw = new StreamWriter(txtPath, false);
            sw.Write(remaining);
            sw.Close();
            return result;
        }

        public static void Push(string s)
        {

            StreamWriter sw = new StreamWriter(txtPath, true);
            sw.WriteLine(s);
            sw.Close();
        }

        public static IEnumerable<string> GetTasks()
        {
            return new List<string>(File.ReadLines(txtPath));
        }
    }
于 2013-07-10T05:16:34.940 に答える