当我点击按钮时,我正在运行以下代码:
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在队列工作时响应
答案 0 :(得分:0)
您不应该在GUI线程中调用WaitForIdle()。 在.NET中使用http://msdn.microsoft.com/en-us/library/a06c0dc2.aspx或在Java中使用http://docs.oracle.com/javase/7/docs/api/javax/swing/SwingUtilities.html invokeLater()。
此机制将您的代码放入队列中以便在GUI线程中执行。因此,您可以使用回调参数中的已处理数据更新GUI视图。
另请参阅有关Invoke&amp; amp;和BeginInvoke:What's the difference between Invoke() and BeginInvoke()