我正在为我的兄弟构建一个应用程序,该应用程序从外部源 GPS 绘图仪获取字符串输入,我想将其显示在多行文本框中。如果有人要让此应用程序长时间运行,我不希望 TextBox.MaxLength 超出或内存分配变得过多。
我想不出一个很好的方法来实现这一点。我需要在文本框中显示最后 n 行。
编辑:标记的解决方案是正确的。谢谢乔恩。我最终把它变成了通用的。下面是我用的。
public class ArrayBuffer<T>
{
private readonly int _maxLines;
private int _writePosition;
private readonly T[] _buffer;
public ArrayBuffer(int maxLines = 100)
{
_maxLines = maxLines;
_buffer = new T[_maxLines];
}
public T[] Push(T value)
{
_buffer[_writePosition++] = value;
_writePosition %= _maxLines;
return _buffer.Skip(_writePosition)
.Concat(_buffer.Take(_writePosition))
.Where(line => line != null).ToArray();
}
}
用法:
var myArrayBuffer = new ArrayBuffer<string>(50);
string[] bufferedStringArray = myArrayBuffer.Push("some string");