сохранить предыдущие и текущие полученные данные в массив C# - PullRequest
0 голосов
/ 26 мая 2020

Я пытаюсь сохранить предыдущие и текущие данные из текстового поля в массив, данные из текстового поля обновляются бесконечно, пока программа не будет остановлена.

У меня есть одна строка, и эта ОДНА строка всегда обновляется, я хочу сохранить ранее полученные данные, чтобы эти данные можно было использовать позже.

image

Как Получаю данные:

private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    dataIn = serialPort1.ReadExisting();          // working

    this.Invoke(new EventHandler(displayData));   // working
}

textBox_ReceievedData2.Text = dataIn;

Ответы [ 4 ]

0 голосов
/ 26 мая 2020

Думаю, вы ищете что-то вроде этого:


        List<string> everyDataChange = new List<string>();

    private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
    {
        dataIn = serialPort1.ReadExisting();          // working

        this.Invoke(new EventHandler(displayData));   // working
    }

    textBox_ReceievedData2.Text += dataIn;
    everyDataChange.Add(dataIn);

Надеюсь, это поможет

0 голосов
/ 26 мая 2020

Один из способов добиться этого - сохранить значения в Dictionary. Есть и другие коллекции, которые вы могли бы использовать, но преимущество Dictionary в этом случае заключается в том, что вы можете использовать Ticks объекта DateTime, чтобы помочь поддерживать порядок сортировки, если это необходимо, а также найти момент времени, когда значение был возвращен.

Ваш код может выглядеть так:

Dictionary<long, string> dataInDict = new Dictionary<long, string>();
private void serialPort1_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
    dataIn = serialPort1.ReadExisting();//working
    var ticks = DateTime.Now.Ticks;
    dataInDict.Add(ticks, dataIn);

    this.Invoke(new EventHandler(displayData));//working
}

Объект Dictionary «dataInDict» должен быть объявлен на уровне класса.

Вы можете выполнять итерацию, хотя Dictionary как:

        foreach (var key in dataInDict.Keys)
        {
            var dateTime = new DateTime(key);
            var value = dataInDict[key];
            Console.WriteLine($"At: {dateTime} value: {value}");
        }
0 голосов
/ 26 мая 2020

Просто AppendText () до конца вашего TextBox:

textBox_ReceievedData2.AppendText(dataIn + "\r\n");

TextBox уже поддерживает массив Lines , к которым вы можете получить доступ в любой время ...

0 голосов
/ 26 мая 2020

Используете ли вы эти собранные данные где-то еще? Если нет, то простейшая реализация, которую я предлагаю, - иметь строковую переменную для хранения и отображения собранных данных и переменную int, которая увеличивается каждый раз, когда эти данные добавляются к данным.

В противном случае вам понадобится объект List<string>, отслеживающий введенные данные. Каждый раз, когда вводится строка, вам нужно добавлять ее с помощью Add (). Вы также можете получить счетчик из этого объекта.

Массивы здесь не будут работать, поскольку массивы имеют фиксированный размер.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...