Winforms 螺纹列表框C

Winforms 螺纹列表框C,winforms,multithreading,listbox,Winforms,Multithreading,Listbox,我试图在一个简单的winform中使用线程。我有一个列表框,我想在表单的加载方法中用数字填充它。我不想等到它被填满。我用的是这样的东西: void fillList() { Invoke(new MethodInvoker( delegate { while(true) {

我试图在一个简单的winform中使用线程。我有一个列表框,我想在表单的加载方法中用数字填充它。我不想等到它被填满。我用的是这样的东西:

void fillList()
        {

            Invoke(new MethodInvoker(
                delegate
                {
                    while(true)
                    {
                        i++;
                        listBox1.Items.Add(i);
                        if(i == 4000)
                        break;


                    }       
                }));

        }
然后在Load方法中,我将执行以下操作:

Thread tr = new Thread(fillList());
tr.Start();
为什么它不起作用

我得到这个错误: 方法名称应为CS0149


谢谢。

Invoke将在UI线程上运行上述操作,如果您从表单加载中调用此操作,则此操作已经发生,因此在填充列表时,您的UI仍将被挂起

 Thread tr = new Thread(fillList);  
在上面的示例中,您可能不需要新线程,只需创建一个数组,填充它,然后执行AddRange而不是Add


Add每次都会导致刷新,这就是降低负载的原因。使用AddRange时,刷新只会发生一次。

调用只会在UI线程上运行上述操作,如果您从表单加载中调用此操作,则此操作已经发生,因此在填充列表时,您的UI仍将被挂起

在上面的示例中,您可能不需要新线程,只需创建一个数组,填充它,然后执行AddRange而不是Add

Add每次都会导致刷新,这就是降低负载的原因。使用AddRange时,刷新只会发生一次