为什么更改ListView的HeaderStyle会挂起应用程序?

时间:2012-02-03 04:13:37

标签: c# .net winforms listview

我一直在努力解决这个问题,这似乎是.Net框架的一个问题。无论如何,我有一个listview,其中包含5000多个项目和一个按钮,用于进一步处理列表视图中的选定项目。现在单击此按钮还应将listview的“listview.HeaderStyle”属性设置为“ColumnHeaderStyle.Nonclickable”。 现在,当我这样做。程序挂起10秒钟然后继续工作。我不知道是什么原因以及为什么会这样。我希望你们有一个解决方案。 有任何想法吗?

2 个答案:

答案 0 :(得分:1)

我现在找到了一个基本的解决方案,我只需要设置

myListview.ColumnClick += new ColumnClickEventHandler(delegate{});

现在我不再需要更改“listview.HeaderStyle”属性了。 基本上我是从ColumnClick属性中禁用HeaderStyle事件,这就是全部。所以不要将HeaderStyle设置为nonClickable。我只是删除/更改事件处理程序中的函数。

答案 1 :(得分:0)

您可以使用BackgroundWorker MSDN解决此问题。

注意:即使使用此解决方案,您的表单也会挂起一段时间。因为您有5000多个项目要绑定到列表,这将阻止您的UI线程,因此winform将挂起。但是您的listview.HeaderStyle会被修改。

试试这个

  1. 点击按钮,您可以直接将listview.HeaderStyle的属性更改为ColumnHeaderStyle.Nonclickable。然后拨打RunWorkerAsync的{​​{1}}。
  2. BackgroundWorker事件处理程序上进行处理,完成后将数据绑定到列表视图。为此,您需要将以下扩展类添加到项目中。
  3. 扩展类

    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();
        }
    }
    

    希望这适合你。