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()。在 .NET 中使用http://msdn.microsoft.com/en-us/library/a06c0dc2.aspx或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 回答