如何在另一个线程中向ListView添加项目而不会导致异常

4
我尝试向ListView添加一行
listView1.Items.AddRange(new ListViewItem[] { item1 });

如何在不同的线程中访问创建时所在的线程,并且避免抛出异常?

有没有人能帮我理解如何正确实现这个功能?


2
主题标题应与您的问题相关 - Neil N
2
这个应该不要关闭。 - jjnguy
@Lazarus:我差点覆盖了你的编辑。伟大的思想总是如此 :) - Binary Worrier
@Justin - 你说得对。他们取消了撤销关闭投票的功能吗? - Justin Niessner
@Justin(2)如果我没记错的话,您从来没有撤销过您的关闭投票权。 - jjnguy
@Binary,他活该!他完全打败了我!!:P - jjnguy
1个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
13

您可以使用 Control.Invoke() 方法将代码重新回到 UI 线程中执行:

listView1.Invoke(
    new MethodInvoker(delegate(){ 
        listView1.Items.AddRange(new ListViewItem[] { item1 };
);

使用通用类型 'System.Action<T>' 需要 1 个类型参数。 - rebel_UA
你使用的是哪个版本的.NET和C#?此外,那段代码片段是你实际的代码吗,还是只是一个例子? - Justin Niessner
@rebel_UA:非泛型的Action委托只在3.5及以上版本的框架中可用。只需声明一个无参数的委托,您就可以使用它了:public delegate void InvokeAction(); - Guffa
@Guffa @rebel_UA - 我稍微修改了我的答案,不再使用Action委托。 - Justin Niessner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,