我ping 50个IP地址,但当我点击开始时程序冻结。形式冻结for循环
我该怎么做,而不结冰。
private void button1_Click(object sender, EventArgs e)
{
string IP = textBox1.Text;
string[] IPBlocks = IP.Split('.');
for (int x = 0; x < 50; x++)
{
System.Threading.Thread.Sleep(50);
int IPLastBlock = Int32.Parse(IPBlocks[3]) + (x+1);
IP = IPBlocks[0]+"."+ IPBlocks[1]+"."+ IPBlocks[2]+"."+ IPLastBlock;
bool pingStatus = PingHost(IP);
textBox2.Text += String.Format("{0} => {1} \r\n", IP, pingStatus);
}
}
把平进程(循环)在单独的线程,并取得进展直到线程处理完成。 –
您不能在事件处理程序中执行冗长的任务,这会阻塞UI线程并阻止UI更新。您需要创建一个新线程来完成您的处理。请参阅http://stackoverflow.com/questions/28194943/creating-and-starting-a-task-on-the-ui-thread和http://stackoverflow.com/questions/661561/how-to-update-the -gui-from-another-thread-in-c –