我一直在努力解决这个问题,这似乎是.Net框架的一个问题。无论如何,我有一个listview,其中包含5000多个项目和一个按钮,用于进一步处理列表视图中的选定项目。现在单击此按钮还应将listview的“listview.HeaderStyle”属性设置为“ColumnHeaderStyle.Nonclickable”。 现在,当我这样做。程序挂起10秒钟然后继续工作。我不知道是什么原因以及为什么会这样。我希望你们有一个解决方案。 有任何想法吗?
答案 0 :(得分:1)
我现在找到了一个基本的解决方案,我只需要设置
myListview.ColumnClick += new ColumnClickEventHandler(delegate{});
现在我不再需要更改“listview.HeaderStyle”属性了。
基本上我是从ColumnClick
属性中禁用HeaderStyle
事件,这就是全部。所以不要将HeaderStyle设置为nonClickable。我只是删除/更改事件处理程序中的函数。
答案 1 :(得分:0)
您可以使用BackgroundWorker
MSDN解决此问题。
注意:即使使用此解决方案,您的表单也会挂起一段时间。因为您有5000多个项目要绑定到列表,这将阻止您的UI线程,因此winform将挂起。但是您的listview.HeaderStyle
会被修改。
试试这个
listview.HeaderStyle
的属性更改为ColumnHeaderStyle.Nonclickable
。然后拨打RunWorkerAsync
的{{1}}。BackgroundWorker
事件处理程序上进行处理,完成后将数据绑定到列表视图。为此,您需要将以下扩展类添加到项目中。扩展类
DoWork
使用此功能,您可以将数据绑定到listview
public static class ControlExtensions
{
public static void Invoke(this Control control, Action action)
{
if (control.InvokeRequired) control.Invoke(new MethodInvoker(action), null);
else action.Invoke();
}
}
希望这适合你。