如何通过BeginInvoke添加listview子项 - > myDelegate进程? 我尝试了各种版本的解决方案,但总是有错误的!
非常感谢你的帮助!
public delegate ListViewItem myDelegate(string aItem);
...
if (InvokeRequired)
{
ListViewItem lvwItem = new ListViewItem();
lvwItem.Text = strMessage;
lvwItem.SubItems.Add(".2.");
BeginInvoke(new myDelegate(listView1.Items.Add), new string[] { strMessage }); //works with a var of type string, but not for more Subitems.add()
}
我找到了答案,但我不能将其作为答案发布,因为我必须等待7个小时....
我发现解决方案没有崩溃我的多线程应用程序......我很愚蠢;)
在我的委托中,我使用了String而不是Listviewitem!
public delegate ListViewItem myDelegate2(ListViewItem aItem);
...
if (InvokeRequired)
{
//BeginInvoke(new myDelegate(listView1.Items.Add), new object[] { strMessage });
ListViewItem lvwItem = new ListViewItem();
lvwItem.Text = strMessage;
lvwItem.SubItems.Add(".2.");
BeginInvoke(new myDelegate2(listView1.Items.Add), new object[] { lvwItem });
}
答案 0 :(得分:4)
你似乎变得相当束缚。试试这个:
ListViewItem lvwItem = new ListViewItem();
lvwItem.Text = strMessage;
lvwItem.SubItems.Add(".2.");
if (listView1.InvokeRequired)
listView1.BeginInvoke(new MethodInvoker(() => listView1.Items.Add(lvwItem)));
else
listView1.Items.Add(lvwItem);