Программа работает с сайтом, ходит по ссылкам нажимает кнопки и т.д. Доходит до момента, когда нужно делать запрос на другой сайт (распознования капчи), начинает отправлять запрос и подвисает (в заголовке программы пишеться "Не отвечает") исчезает из таскбара и трея. потом через 20 секунд отмирает (пропадает надпись в заголовке программы), но так и не появляеться, ни в трее ни в таскбаре. (пока не щелкнешь по ней) подскажите как с этим бороться? и в чем может быть причина?
Однопоточность - это не проблема :) Если выводить загрузку в отдельные потоки, то подвисать не будет. Но многопоточные приложения это довольно сложно, с учетом имеемого опыта, и граблей там много :-) Так что остается с этим смериться :-))
--
- Нашел ответ самостоятельно, расскажи всем!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-) - Помни: Одна тема - один вопрос! - ... ()
черт :) блин есть под рукой аналогичные программы и подвисания как такового нет. я очень сомневаюсь, что в них используется многопоточность :) может можно настроить TimeOut какой-нибудь, по истечению которого у программы появляеться статус "не отвечает" ? либо хотя бы востанавливать программу в таскбаре и трее?
я очень сомневаюсь, что в них используется многопоточность :)
если не зависает, значит запросы выполняются в отличном от текущего потоке.
может можно настроить TimeOut какой-нибудь, по истечению которого у программы появляеться статус "не отвечает" ?
скорей всего можно, если есть такое свойство, у объекта, которым выполняются запросы :-)
У WebClient есть асинхронные методы взаимодействия с удаленным сервером, т.е. запросы выполняются в других потоках. И есть события для отлавливания процесса выполнения запроса и его завершения. А WebBrowser по идеи зависать не должен, он по сути тоже использует многопоточность, но на более высоком уровне.
--
- Нашел ответ самостоятельно, расскажи всем!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-) - Помни: Одна тема - один вопрос! - ... ()
Если обработка капчи реализована, как написано в , то WebBrowser там не используется, и подвисание происходит из-за того, что запрос выполняется в том же потоке, что и программа.
http://kbyte.ru/ru/Forums/Single.aspx?id=10500:
ну я пока легких путей не ищю :)
c WebClient было бы проще, т.к. у него есть родные методы для асинхронных запросов, а с HttpWebRequest придется самостоятельно выносить все в потоки, т.к. это более низкий уровень.
--
- Нашел ответ самостоятельно, расскажи всем!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-) - Помни: Одна тема - один вопрос! - ... ()
см. методы с суффиксом Async Например, myWeb.UploadStringAsync И события UploadProgressChanged, UploadStringCompleted, можно только одно из них, т.н. последнее. Добавлять через AddHandler AddHandler myWeb.UploadStringCompleted AddressOf myWeb_UploadStringCompleted myWeb_UploadStringCompleted - это функция, имя может быть любым. с атрибутами sender As Object и e As UploadStringCompletedEventArgs, по аналогии с обработчиками событий обычных контролов WinForms. в UploadStringCompletedEventArgs можно узнать url и еще что-то.
--
- Нашел ответ самостоятельно, расскажи всем!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-) - Помни: Одна тема - один вопрос! - ... ()