【发布时间】:2017-11-06 09:04:15
【问题描述】:
我正在尝试将列表传递传递给 Windows 表单,但将记录添加到此列表时出错(请参阅代码)。列表中有 3 个参数:MacAddress(string)、Port(int)、数据包到达时间(DateTime)。我想每 1 秒刷新一次列表框中的列表。
class Listen
{
Form1 mainForm;
List<Tuple<string, int, DateTime>> list = new List<Tuple<string, int, DateTime>>();
public Listen(Form1 mainForm)
{
this.mainForm = mainForm;
}
public List<Tuple<string, int, DateTime>> GetList()
{
return list;
}
public void AddtoList(string MacAddr, int deviceNumber, DateTime dt)
{
//ERROR:No overload for method 'Add' takes 3 arguments
list.Add(MacAddr, deviceNumber, dt);
}
public void StartListen(string deviceNum)
{
...
AddtoList(MacAddr.ToString(), deviceNumber, DateTime.Now);
...
}
}
public partial class Form1 : Form
{
private Listen lis;
public Form1()
{
InitializeComponent();
lis = new Listen(this);
var devices = lis.GetDevices();
comboBox2.DataSource = devices;
}
public void PrintList()
{
lis = new Listen(this);
var list = lis.GetList();
for (int i = 0; i < list.Count; i++)
{
TimeSpan ts = DateTime.Now - list[i].Item3;
listBox1.Items.Add(list[i].Item1 + "Port: " + list[i].Item2 + "Timer: " + ts);
}
}
private void timer1_Tick(object sender, EventArgs e)
{
PrintList();
}
}
【问题讨论】:
-
错误信息非常清楚:
Add需要Tuple<string, int, DateTime>,但您传递了三个单个值。试试list.Add(new Tuple<string, int, DateTime>(MacAddr, deviceNumber, dt);。 -
好的,所以每个收到的数据包都会创建新的元组?如何将其传递给 Form 类中的列表框?