-1

wpfでは、リストボックスコントロールと2つのボタンがあります.数字を追加しても彼の仕事がうまくいかないまで、最初のボタンをクリックしたときに2番目のボタンを使用できるようにしたい.ディスパッチャを使用します.このスレッドを同期するにはどうすればよいですか? addnumbers 処理時に、2 番目のボタンを使用したり、ウィンドウを移動したり、他の UI 要素を使用したりできるようにしたいと考えています。

    void AddNumbers()
    {

                for (int i = 1; i <= 1000000; i++)
                {
                    listBox1.Items.Add(i);
                }

    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {

        Thread thr = new Thread(new ThreadStart(AddNumbers));
        thr.Start();


    }

    private void button2_Click(object sender, RoutedEventArgs e)
    {

        MessageBox.Show("Hello World!");
    }
4

1 に答える 1

0

メイン (UI) スレッドのみが UI コントロールにアクセスできます。リストボックスに 100 万個のアイテムが必要なのはなぜですか? リストボックスは仮想化をサポートしています。BackgroundWorker (またはスレッド) を使用してリストを作成し、RunWorkerCompleted でリストを UI ListBox にバインドします。同期に関しては、BackgroundWorker を開始するときに有効/無効にし、コールバックで有効/無効にするだけです。繰り返しますが、なぜ ListBox に 100 万個のアイテムが必要なのですか?

http://msdn.microsoft.com/en-us/library/cc221403(v=VS.95).aspx

于 2012-06-22T23:49:51.033 に答える