在循环过程中形成冻结



i ping 50 IP地址,但是当我单击"启动"时,程序会冻结。

我该怎么做而不冻结。

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} rn", IP, pingStatus);
    }
}

on按钮单击启动separte线程,这不会悬挂您的屏幕

    private void button1_Click(object sender, EventArgs e)
    {
        Thread newThread= new Thread(PingIP);
        newThread.Start(); 
    }
    private void PingIP()
    {
        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} rn", IP, pingStatus);
        }
    }

使用threadpool.queueuserworkitem

ThreadPool.QueueUserWorkItem(delegate {
    bool pingStatus = PingHost(IP);
    textBox2.Text += String.Format("{0} => {1} rn", IP, pingStatus);
});

最新更新