Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.03.2012, 21:19   #1
Demetrius
 
Регистрация: 27.07.2009
Сообщений: 8
По умолчанию Ошибка с асинхронными вызовами

Есть функция, которая возвращает список всех айпи адресов, которые пингуются.

Код:
Ping pinger;
IPAddress localIP;
....
public List<IPAddress> GetLocalAlive()
{
    List<IPAddress> result = new List<IPAddress>();
    byte[] address = localIP.GetAddressBytes();
    byte local = address[3];
 
    for (address[3] = 0; address[3] != 255; ++address[3])
    {
         pinger.SendAsync(new IPAddress(address), 5, result);
    }
    return result;
}
Уже при втором-третьем вызове ошибка :
Цитата:
Уже выполняется асинхронный вызов. Он должен быть завершен или отменен, прежде чем можно будет вызвать этот метод.
Дело в том, что использовать pinger.Send не катит - слишком много итераций, процесс занимает много времени.

Как можно решить проблему?
Demetrius вне форума Ответить с цитированием
Старый 22.03.2012, 11:34   #2
ds.Dante
Старожил
 
Аватар для ds.Dante
 
Регистрация: 06.08.2009
Сообщений: 2,992
По умолчанию

Вызывать асинхронно метод, который в цикле будет перебирать все пинги (обычно, т. е. не асинхронно).

Можно ещё попробовать засунуть new Ping внутрь цикла, чтобы работать с разными экземплярами. Лишь бы их не было слишком много.
ds.Dante вне форума Ответить с цитированием
Старый 22.03.2012, 17:47   #3
stalsoft
Форумчанин
 
Регистрация: 09.06.2011
Сообщений: 147
По умолчанию

я когда то делал примерно так!

просто создавал новый поток...и вот код метода этого потока (код не весь)

for (int count = 0; count < 255; count++)
{
//netAddress - это здесь типа строка, которая содержит часть IP адреса, к примеру 10.1.1. далее в цикле просто подставляется недостающая часть IP и идет пинг

buffer = netAddress + count.ToString();

PingReply pr = (new Ping()).Send(buffer, timeOut);
if (pr.Status == IPStatus.Success)
{
this.Invoke(addRowDel, new object[] { buffer });
}

Вот такое вот я предлагаю использовать Вам как альтернативу.
У женщин чары образуются из стрингов;
А у программистов наоборот - стринги образуются из чаров;
stalsoft вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26
Прошу помочь с программой на Shell и системными вызовами. Osinin Помощь студентам 7 28.08.2009 18:42