C# 将SerialDataReceiveDevenHandler追加到列表中以返回到main方法
我在C# 将SerialDataReceiveDevenHandler追加到列表中以返回到main方法,c#,serial-port,C#,Serial Port,我在string[]toArray=tagList.toArray()上得到空值和空值 我要做的是将一个字符串数组列表从ReadTag()返回到我的main方法。port\u DataReceived似乎不会将任何列表返回到ReadTag的函数tagList。我猜这是个愚蠢的问题,请帮忙。谢谢 ReadTag()函数的代码: List<string> tagList = new List<string>(); public string[] Readtag()
string[]toArray=tagList.toArray()上得到空值和空值在ReadTag()函数上调用tagList
时的代码>
我要做的是将一个字符串数组列表从ReadTag()返回到我的main方法。port\u DataReceived
似乎不会将任何列表返回到ReadTag的函数tagList
。我猜这是个愚蠢的问题,请帮忙。谢谢
ReadTag()函数的代码:
List<string> tagList = new List<string>();
public string[] Readtag()
{
//port connections option
_serialPort.WriteLine("RLD");
_serialPort.ReadTimeout = 2000;
_serialPort.DataReceived += new SerialDataReceivedEventHandler(port_DataReceived);
string[] toArray = tagList.ToArray();
Console.WriteLine(tagList);
return toArray;
}
我找到了一个解决方案,让线程休眠几秒钟,让EventHandler在显示之前将所有结果附加到标记列表中。这里有各种各样的问题,但主要问题是事件处理程序不会立即运行,而是在事件发生时运行。
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
var result = string.Empty;
result += _serialPort.ReadExisting();
while (result.Contains(@"TID"))
{
var slashPos = result.IndexOf(@"TID", 1);
result = result.Replace("TID ", "");
Console.WriteLine(result);
tagList.Add(result);
}
}