我有一个应用程序,通过单击按钮通过 PC 串行端口向微型计算机发送指令。然后,微流回触发数据接收事件处理程序的数据。这被捕获到一个字符串中。
此时我希望使用字符串的数据并填充我的列表视图框。我可以使用调用、委托来执行此操作,因为我仍在接收数据的线程中。
有什么方法可以在线程退出后调用事件处理程序或简单例程来执行此操作,因此我不需要使用调用、委托?如果它由按钮触发,则构建例程可以正常工作,但我希望以编程方式调用它来完成任务。
希望它足够清楚,这是我的第一篇文章。
编辑:这是一些示例代码 -
private void port_DataReceived(object sender, SerialDataReceivedEventArgs e)
{
//use 28591 or("ISO-8859-1") to cover all hex bytes from 0 - 255
serialPort1.Encoding = Encoding.GetEncoding(28591);
//wait for download to complete by monitoring cts line
if (HoldData == true)
{
while (serialPort1.CtsHolding == true) ;
HoldData = false;
}
else
Thread.Sleep(50);
string text = serialPort1.ReadExisting();
switch (text[0])
{
case '?': MemLabelUpdate(); break;
case '>': WriteConfig(text); break;
case '=': SealTest(text); break;
case '<': CurrentNumber(text); break;
default: DataDownload(text); break;
}
}
字符串文本的第一个字节是输入内容的标识符。这反过来调用一个函数,该函数使用调用委托方法填充主窗体上的标签,因为它在接收数据的线程中运行。对下载数据函数的默认调用传递文本并对其进行分类,因为这是大量事件。然后将结果传递到我的列表视图框到相关列中。我想摆脱使用调用委托方法。我需要退出 port_datareceived 线程来执行此操作,并在退出时输入我的函数以更新列表,如下所示。我如何以编程方式触发这种事件。
private void btnDisplayData_Click(object sender, EventArgs e)
{
int SectionStart = 10;
int SectionEnd = 8;
listView1.Items.Clear();
listView1.View = View.Details;
listView1.GridLines = true;
//Add columns to listview
listView1.Columns.Add("Event", 80, HorizontalAlignment.Center);
listView1.Columns.Add("Time", 80, HorizontalAlignment.Center);
listView1.Columns.Add("Date", 80, HorizontalAlignment.Center);
//Print results to listview box
ListViewItem ListItem;
for (int i = 0; i < 10; i++)
{
ListItem = listView1.Items.Add(DownloadedData.Substring(SectionStart, SectionEnd));
SectionStart += 8;
ListItem.SubItems.Add(DownloadedData.Substring(SectionStart, SectionEnd));
SectionStart += 8;
ListItem.SubItems.Add(DownloadedData.Substring(SectionStart, SectionEnd));
SectionStart += 8;
}
foreach (ColumnHeader column in listView1.Columns)
{
column.Width = -2;
}
}