C # - автоматически добавлять данные порта в текстовый файл - PullRequest
0 голосов
/ 28 февраля 2019

Следующий код считывает данные порта и записывает данные в текстовое поле с временным шагом, если он отличается от предыдущего.После этого я могу сохранить данные в текстовый файл.

Вместо того, чтобы записывать их в текстовое поле, а затем сохранять их в текстовом файле для каждой кнопки, я бы хотел, чтобы он автоматически добавлялся в текстовый файл каждые x секунд (скажем,10).Прочитав другие вопросы, я получил некоторые идеи, но не смог их реализовать.

Кто-нибудь может помочь?

public partial class Form1 : Form
{
    private SerialPort myport; 
    private DateTime datetime;
    private string in_data; 
    private string in_data_old = ""; 

    public Form1()
    {
        InitializeComponent();

    }

    private void start_btn_Click(object sender, EventArgs e)
    {
        myport = new SerialPort();
        myport.BaudRate = 9600; 
        myport.PortName = port_name_tb.Text; 
        myport.Parity = Parity.None;
        myport.DataBits = 8;
        myport.StopBits = StopBits.One;
        myport.DataReceived += myport_DataReceived;


        try
        {
            myport.Open();
            data_tb.Text = "";

        }

        catch(Exception ex) {
            MessageBox.Show(ex.Message, "Error");

        }
    }

    void myport_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {

        in_data = myport.ReadLine();
        if (in_data != in_data_old)
        {
            this.Invoke(new EventHandler(displaydata_event));
        }
        in_data_old = in_data;
    }

    private void displaydata_event(object sender, EventArgs e)
    {
        datetime = DateTime.Now;
        string time = datetime.Year+ "." +datetime.Month+ "." + datetime.Day + " " + datetime.Hour+ ":" +datetime.Minute+ ":" +datetime.Second;
        data_tb.AppendText(time + "\t\t\t\t\t" + in_data+"\n"); 
    }

    private void stop_btn_Click(object sender, EventArgs e)
    {
        try
        {
            myport.Close();
        }
        catch (Exception ex2)
        {
            MessageBox.Show(ex2.Message, "Error");
        }
    }

    private void save_btn_Click(object sender, EventArgs e)
    {
        try
        {
        string pathfile = @"C:\Users\xy\Desktop\DATA\";
        string filename = "light_data.txt"; 
        System.IO.File.AppendAllText(pathfile + filename, data_tb.Text); 
        MessageBox.Show("Data has been saved to "+pathfile, "Save File");
        }
        catch(Exception ex3)
        {
            MessageBox.Show(ex3.Message, "Error");
        }
    }
}

1 Ответ

0 голосов
/ 28 февраля 2019

Добавьте таймер, вы можете найти его на панели инструментов и установить его интервал для любого таймера, который вам нужен, и добавить туда свою функцию btn click, например:

private void timer1_Tick(object sender, EventArgs e)
{
   myport = new SerialPort();
   myport.BaudRate = 9600; 
   myport.PortName = port_name_tb.Text; 
   myport.Parity = Parity.None;
   myport.DataBits = 8;
   myport.StopBits = StopBits.One;
   myport.DataReceived += myport_DataReceived;

   try
   {
      myport.Open();
      data_tb.Text = "";
   }
   catch(Exception ex) {
      MessageBox.Show(ex.Message, "Error");
   }
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...