【问题标题】:store previous and current received data into an array C#将先前和当前接收到的数据存储到数组 C#
【发布时间】:2020-05-26 03:34:10
【问题描述】:

我正在尝试将文本框中的先前和当前数据存储到数组中,文本框中的数据会无限更新,直到程序停止。

我有一条线,那条线一直在更新,我想把之前收到的数据存起来,以后可以用这个数据。

我如何获取数据:

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

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

textBox_ReceievedData2.Text = dataIn;

【问题讨论】:

  • 您的示例代码有点误导。您解释您不想要的内容,然后显示确切的示例代码。编辑您的问题以反映您想要的代码并指出您需要帮助的地方。 “这是我想要实现的代码,但我不知道如何创建......”
  • 我更新了希望它更有意义
  • 所以你想创建某种集合(如List)来存储“dataIn”的值?
  • 我想我只是在不熟悉列表的情况下学习 c#,我看看
  • 列表类似于Array,除了List,您可以继续添加值直到 Int32.Max(我认为......无论如何都是很多值)。

标签: c# arrays forms user-interface


【解决方案1】:

我认为您正在寻找这样的东西:


        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);

希望对你有帮助

【讨论】:

  • 我有点理解这一点,它可以工作,但我收到的数据将不再显示在使用这种方法的文本框中?
  • 查看我的编辑。这是现在想要的吗?如果不是,那么确切的问题是什么?最好的问候@Cherios
  • 数据存储在列表中,但我想要的是从文本框中复制数据,同时保持实时更新,然后将以前的数据复制到变量中。跨度>
  • 数据存储在列表中,文本框更新为新数据。就是这样
【解决方案2】:

您是否在其他地方使用这些收集的数据?如果没有,我建议的最简单的实现是使用一个字符串变量来存储和显示收集的数据,以及一个每次将数据添加到数据时递增的 int 变量。

否则,您将需要一个 List&lt;string&gt; 对象来跟踪输入的数据。每次输入字符串时,都需要使用 Add() 进行添加。您还可以从此对象获取计数。

数组在这里不起作用,因为数组的大小是固定的。

【讨论】:

    【解决方案3】:

    实现此目的的一种方法是将值存储在Dictionary 中。您可以使用其他集合,但在这种情况下,Dictionary 的优点是您可以使用DateTime 对象的Ticks 来帮助维护排序顺序(如有必要),还可以找到值的时间点被退回了。

    您的代码可能如下所示:

    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}");
            }
    

    【讨论】:

      【解决方案4】:

      只需 AppendText() 到文本框的末尾:

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

      TextBox 已经维护了一个 Lines 数组,您可以随时访问它...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-12
        • 1970-01-01
        • 2018-04-09
        • 1970-01-01
        • 2020-08-03
        相关资源
        最近更新 更多