0

ボタンをクリックすると、次のコードを実行しています。

                foreach (string item in urlQueue)
                {

                    log("creating job " + iia.ToString());
                    _smartThreadPool.QueueWorkItem(
                        new Amib.Threading.Func<string, int, int, string, int>(checkURLSmart),
                        item, iia, 5000, kryptonTextBox1.Text);

                    iia++;
                }

                Application.DoEvents();

                _smartThreadPool.Start();

                _smartThreadPool.WaitForIdle();
                _smartThreadPool.Shutdown();

何らかの理由でこれが UI スレッドをブロックしているのですが、これを修正する方法はありますか? キューが動作している間、UI をレスポンシブにしたい

4

1 に答える 1

0

GUI スレッドで WaitForIdle() を呼び出さないでください。http://msdn.microsoft.com/en-us/library/a06c0dc2.aspxを .NET で使用するか、 http: //docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html invokeLaterを使用します。 () 代わりにJavaで。

このメカニズムは、GUI スレッドで実行するためにコードをキューに入れます。そのため、コールバック パラメータで処理されたデータを使用して GUI ビューを更新できます。

Invoke と BeginInvoke の違いについての説明も参照してください: Invoke() と BeginInvoke() の違いは何ですか

于 2012-10-09T10:04:18.567 に答える