我有一个单击按钮的循环,用于检查网站是否可用,它将网站列表添加到数组中并使用for循环逐个检查它们,如果它们可用,则会向文本框添加文本但是当我的列表变长时,程序没有响应,大约10秒后,所有结果都会一个接一个地写在那个文本框中,即使列表不长并且处理得很好,我也无法解决任何与程序有关的问题。它,无论如何要解决它?
答案 0 :(得分:1)
最简单的方法是使用async / await
async private void button1_Click2(object sender, EventArgs e)
{
foreach (var url in sites)
{
bool available = await Task.Run(() =>
{
//Do your work here
return true; //or false;
});
//Update UI here
}
}
了解详情:https://msdn.microsoft.com/en-us/library/system.threading.tasks.task(v=vs.110).aspx和https://msdn.microsoft.com/en-us/library/hh191443.aspx
答案 1 :(得分:0)
那是因为你的CPU重量循环是在GUI线程上完成的,这意味着它无法再更新屏幕,导致Windows认为它停止响应,而实际上它只是在做一堆工作而没有时间更新它的屏幕。
使用BackgroundWorker
通过在另一个线程中运行循环来完成此操作:https://msdn.microsoft.com/en-us/library/cc221403%28v=vs.95%29.aspx。
将您的循环代码移至DoWork
的{{1}}。