/// <summary>
/// 定义一个委托代理处理线程与主界面listview控件的通信
/// </summary>
/// <param name="ip"></param>
/// <param name="state"></param>
private delegate void SetListViewCallback(string ip, string state, int way);
/// <summary>
/// 定义一个函数,用于向窗体上的ListView控件添加内容
/// </summary>
/// <param name="ip"></param>
/// <param name="state"></param>
/// <param name="way">表示对listview的操作方式:1代表增添,2代表修改</param>
private void SetListView(string ip, string state, int way)
{
if (this.listVwNode.InvokeRequired == false) //如果调用该函数的线程和控件位于同一个线程
{
switch (way)
{
case 1:
ListViewItem lvi = new ListViewItem();
lvi.SubItems[0].Text = ip;
lvi.SubItems.Add(state);
this.listVwNode.Items.Insert(0, lvi);
break;
case 2:
for (int i = 0; i < this.listVwNode.Items.Count; i++)
{
if (this.listVwNode.Items[i].SubItems[0].Text == ip)
{
this.listVwNode.Items[i].SubItems[1].Text = state;
}
}
break;
default:
break;
}
}
else //如果调用该函数的线程和控件不在同一个线程
{
//通过使用Invoke的方法,让子线程告诉窗体线程来完成相应的控件操作
SetListViewCallback callback = new SetListViewCallback(SetListView);
//使用控件的Invoke方法执行DMSGD代理(其类型是SetListViewCallback)
this.Invoke(callback, ip, state, way);
}
}