1

シンプルなウィンフォームでスレッドを使用しようとしています。フォームの load メソッドで数値を入力したい ListBox があります。埋まるまで待ちたくない。私はこのようなものを使用しています:

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)

ありがとう。

4

2 に答える 2

3

Invoke は、フォームの読み込みからこれを呼び出している場合に既に発生している UI スレッドで上記を実行するだけなので、リストにデータを入力している間も UI は保持されます。

上記の例では、おそらく新しいスレッドは必要ありません。配列を作成し、それを埋めてから、Add の代わりに AddRange を実行するだけです。

Add は毎回リフレッシュを引き起こし、それがロードを遅くしている原因です。AddRange を使用すると、更新は 1 回だけ行われます。

于 2009-01-12T19:28:12.927 に答える
2
 Thread tr = new Thread(fillList);  
于 2009-01-12T19:20:24.347 に答える