Ах, я люблю нить. Это делает программы намного интереснее ...
Итак, когда я начал изучать, как создавать адаптивные приложения, я наткнулся на функцию: Application.DoEvents ()
(http://msdn.microsoft.com/en-us/library/system.windows.forms.application.doevents.aspx)
Это заставляет вашу форму обрабатывать некоторые события окна, которые она получает. Я думаю, что ваш код может измениться, чтобы включить вызов после каждого запроса пинга ...
т.е. в обработчике события при нажатии
count = 0;
for (int j = 1; j < 255; j++)
for (int i = 1; i < 255; i++)
{
Ping ping = new Ping();
PingReply pingreply = ping.Send(IPAddress.Parse(locip[0] + "." + locip[1] + "." + j + "." + i));
if (pingreply.Status == IPStatus.Success)
{
status = "o";
repAddress = pingreply.Address.ToString(); ;
repRoundtrip = pingreply.RoundtripTime.ToString();
repTTL = pingreply.Options.Ttl.ToString();
repBuffer = pingreply.Buffer.Length.ToString();
string[] lineBuffer = { status, repAddress, repRoundtrip, repTTL, repBuffer };
ipList.Rows.Add(lineBuffer);
count += 1;
progressBar.Value += 1;
}
Application.DoEvents(); //but not too often.
}
Теперь это было в дни, предшествующие точечным сетям, и оно сохранилось до сих пор, однако, это не то, что вы должны воспринимать легкомысленно. Если вы нажмете другую кнопку в форме, она запустит другой поток, который попытается выполнить, и если вы не будете осторожны, вызовите исключения потока в вашей форме. Некоторые разработчики скажут, что вы этим не пользуетесь, но с момента вашего старта я бы сказал, попробуйте:)
Я не могу использовать этот метод в зависимости от приложения. Вместо этого я бы на самом деле создал несколько «обработок» обработки; по одному на каждое ядро процессора, которое было в системе. Я бы добавил ips для сканирования в объект очереди, а затем запускал от 2 до 4 экземпляров потоков (http://msdn.microsoft.com/en-us/library/system.threading.thread.aspx), каждый из которых по очереди извлекал элемент из очереди, обрабатывал информацию (т.е. логику ping) и поместить результат в другую очередь и очередь вывода. Каждый раз, когда поезд заканчивает работу элемента, он вызывает событие, на другом конце которого будет обработчик в форме. Использование Invoke для сделать потокобезопасные вызовы (http://msdn.microsoft.com/en-us/library/ms171728.aspx) в моей форме, я бы соответственно обновил информацию об интерфейсе пользователя.
Многопоточность - это весело, чувак :) Со временем вы можете обнаружить, что вы можете использовать MSMQ для создания системы, которая использует многоядерные системы других компьютеров для выполнения таких задач, как обработка изображений (или что-то с помощью .......; ) * * тысяча двадцать-один