Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DownloadStringAsync + timeout 10 сек 
V
    Опции темы
Тигер
Дата 27.7.2013, 13:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



Пытаюсь сделать timeout для WebClient. Впринципе нашел разные способы, но не могу понять почему мой не работает...
Всегда переходит на метку theEnd;
Код

                    wc.DownloadStringCompleted += (ender,args)=>
                    {
                        res = args.Result;
                        var cook = Regex.Matches(wc.ResponseHeaders.ToString(), "Set\\-Cookie:\\s*([\\w\\-_\\.]+\\s*=\\s*[^;]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);
                        foreach (Match val in cook)
                            cookies += val.Groups[1].Value.Trim() + "; ";
                    };
                    wc.DownloadStringAsync(new System.Uri(url));

                    int msec = 0;
                    while (String.IsNullOrEmpty(res))
                    {
                        Thread.Sleep(1);
                        ++msec;
                        if (msec >= 10000)
                        {
                            lastError = "TimeOut";
                            goto theEnd;
                        }
                    }
                    return res;


подозреваю что Sleep блокирует главный поток и поэтому событие не вызывается, если конечно событие вызывается в главном потоке...
Как быть в этом случае, мне не хочется использовать обертку над ВебКлиентом или Task, данные методы мне кажутся избыточными...

Это сообщение отредактировал(а) Тигер - 27.7.2013, 13:31
PM MAIL   Вверх
Тигер
Дата 27.7.2013, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 4.4.2010

Репутация: нет
Всего: нет



Таки сделал ) радость
Код

                   var thread = new Thread(delegate()
                    {  
                            wc.DownloadStringCompleted += (sender, args) =>
                            {
                                try
                                {
                                    res = args.Result;
                                    var cook = Regex.Matches(wc.ResponseHeaders.ToString(), "Set\\-Cookie:\\s*([\\w\\-_\\.]+\\s*=\\s*[^;]+)", RegexOptions.IgnoreCase | RegexOptions.Compiled | RegexOptions.Singleline);
                                    foreach (Match val in cook)
                                        cookies += val.Groups[1].Value.Trim() + "; ";
                                }
                                catch (Exception e)
                                {
                                    lastError = e.Message;
                                }
                            };
                            wc.DownloadStringAsync(new System.Uri(url));
                       
                    });
                    thread.IsBackground = true;
                    thread.Start();

                    int msec = 0;
                    while (String.IsNullOrEmpty(res))
                    {
                        Thread.Sleep(1);
                        ++msec;
                        if (msec >= 10000)
                        {
                            lastError = "TimeOut";
                            goto theEnd;
                        }
                        if (!String.IsNullOrEmpty(lastError))
                        {
                            goto theEnd;
                        }
                    }
                    return res;

PM MAIL   Вверх
infarch
Дата 29.7.2013, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 526
Регистрация: 13.3.2009

Репутация: 1
Всего: 1



В вашем случае все можно сделать граздо проще, вот посмотрите:
http://stackoverflow.com/questions/1789627...ebclient-object
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0899 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.