Здравствуйте! Сегодня: Вт, 7 Сен 2010, Ваш IP: 38.107.191.115 Вход | Регистрация | Забыли пароль?
> Список форумов Kbyte.Ru - - Общие вопросы программирования
+ Добавить ответ | + Создать новую тему Страница: 1
Тема: Подвисание программы дата добавления: 11.07.2010 / 22:02
Автор темы:
spiller
тем: 11/ответов: 91/благодарностей: 0

Icq: 262121621
ответов: 91
вопросов: 11


Программа работает с сайтом, ходит по ссылкам нажимает кнопки и т.д.
Доходит до момента, когда нужно делать запрос на другой сайт (распознования капчи), начинает отправлять запрос и подвисает (в заголовке программы пишеться "Не отвечает")
исчезает из таскбара и трея.
потом через 20 секунд отмирает (пропадает надпись в заголовке программы), но так и не появляеться, ни в трее ни в таскбаре. (пока не щелкнешь по ней)
подскажите как с этим бороться? и в чем может быть причина?
Технологии: Visual Basic .NET


 
Ответ # 1 # дата добавления: 11.07.2010 / 22:21
Автор ответа:
Aleksey Nemiro
тем: 462/ответов: 2915/благодарностей: 39
Администратор
Эксперт

Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 2915
вопросов: 462


Однопоточность - это не проблема :)
Если выводить загрузку в отдельные потоки, то подвисать не будет.
Но многопоточные приложения это довольно сложно, с учетом имеемого опыта, и граблей там много :-)
Так что остается с этим смериться :-))
--
@aleksey_nemiro

- Нашел ответ самостоятельно, расскажи всем!
- Анонимус загрузи фотку, тебя не видно!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-)
- Помни: Одна тема - один вопрос!
- Kbyte Bonus Points ($$$) за вопросы и ответы на форумах Kbyte.Ru ... (Уже выдано!)

[- Изменить подпись | Личное сообщение админу | Искать друзей | Пригласить друзей | Чииииз :-) | Web-инструменты | Слоны | Деньги -]
 
Ответ # 2 # дата добавления: 11.07.2010 / 22:26
Автор ответа:
spiller
тем: 11/ответов: 91/благодарностей: 0

Icq: 262121621
ответов: 91
вопросов: 11


черт :)
блин есть под рукой аналогичные программы и подвисания как такового нет.
я очень сомневаюсь, что в них используется многопоточность :)
может можно настроить TimeOut какой-нибудь, по истечению которого у программы появляеться статус "не отвечает" ?
либо хотя бы востанавливать программу в таскбаре и трее?
 
Ответ # 3 # дата добавления: 11.07.2010 / 22:39
Автор ответа:
Aleksey Nemiro
тем: 462/ответов: 2915/благодарностей: 39
Администратор
Эксперт

Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 2915
вопросов: 462


я очень сомневаюсь, что в них используется многопоточность :)
если не зависает, значит запросы выполняются в отличном от текущего потоке.
может можно настроить TimeOut какой-нибудь, по истечению которого у программы появляеться статус "не отвечает" ?
скорей всего можно, если есть такое свойство, у объекта, которым выполняются запросы :-)

У WebClient есть асинхронные методы взаимодействия с удаленным сервером, т.е. запросы выполняются в других потоках. И есть события для отлавливания процесса выполнения запроса и его завершения.
А WebBrowser по идеи зависать не должен, он по сути тоже использует многопоточность, но на более высоком уровне.
--
@aleksey_nemiro

- Нашел ответ самостоятельно, расскажи всем!
- Анонимус загрузи фотку, тебя не видно!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-)
- Помни: Одна тема - один вопрос!
- Kbyte Bonus Points ($$$) за вопросы и ответы на форумах Kbyte.Ru ... (Уже выдано!)

[- Изменить подпись | Личное сообщение админу | Искать друзей | Пригласить друзей | Чииииз :-) | Web-инструменты | Слоны | Деньги -]
 
Ответ # 4 # дата добавления: 11.07.2010 / 22:46
Автор ответа:
spiller
тем: 11/ответов: 91/благодарностей: 0

Icq: 262121621
ответов: 91
вопросов: 11


есть две формы form1 и webbrowser.
дак вот, в том то и дело что webbrowser не подвисает :)
а вот основная форма (form1) подвисает с последствиями :)
 
Ответ # 5 # дата добавления: 11.07.2010 / 23:03
Автор ответа:
Aleksey Nemiro
тем: 462/ответов: 2915/благодарностей: 39
Администратор
Эксперт

Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 2915
вопросов: 462


Если обработка капчи реализована, как написано в этой теме, то WebBrowser там не используется, и подвисание происходит из-за того, что запрос выполняется в том же потоке, что и программа.
http://kbyte.ru/ru/Forums/Single.aspx?id=10500:
ну я пока легких путей не ищю :)
c WebClient было бы проще, т.к. у него есть родные методы для асинхронных запросов, а с HttpWebRequest придется самостоятельно выносить все в потоки, т.к. это более низкий уровень.
--
@aleksey_nemiro

- Нашел ответ самостоятельно, расскажи всем!
- Анонимус загрузи фотку, тебя не видно!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-)
- Помни: Одна тема - один вопрос!
- Kbyte Bonus Points ($$$) за вопросы и ответы на форумах Kbyte.Ru ... (Уже выдано!)

[- Изменить подпись | Личное сообщение админу | Искать друзей | Пригласить друзей | Чииииз :-) | Web-инструменты | Слоны | Деньги -]
 
Ответ # 6 # дата добавления: 11.07.2010 / 23:07
Автор ответа:
Aleksey Nemiro
тем: 462/ответов: 2915/благодарностей: 39
Администратор
Эксперт

Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 2915
вопросов: 462


Для тех, кто не ищет легких путей ;-)
--
@aleksey_nemiro

- Нашел ответ самостоятельно, расскажи всем!
- Анонимус загрузи фотку, тебя не видно!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-)
- Помни: Одна тема - один вопрос!
- Kbyte Bonus Points ($$$) за вопросы и ответы на форумах Kbyte.Ru ... (Уже выдано!)

[- Изменить подпись | Личное сообщение админу | Искать друзей | Пригласить друзей | Чииииз :-) | Web-инструменты | Слоны | Деньги -]
 
Ответ # 7 # дата добавления: 11.07.2010 / 23:08
Автор ответа:
Aleksey Nemiro
тем: 462/ответов: 2915/благодарностей: 39
Администратор
Эксперт

Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 2915
вопросов: 462


и еще, и еще
--
@aleksey_nemiro

- Нашел ответ самостоятельно, расскажи всем!
- Анонимус загрузи фотку, тебя не видно!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-)
- Помни: Одна тема - один вопрос!
- Kbyte Bonus Points ($$$) за вопросы и ответы на форумах Kbyte.Ru ... (Уже выдано!)

[- Изменить подпись | Личное сообщение админу | Искать друзей | Пригласить друзей | Чииииз :-) | Web-инструменты | Слоны | Деньги -]
 
Ответ # 8 # дата добавления: 11.07.2010 / 23:09
Автор ответа:
spiller
тем: 11/ответов: 91/благодарностей: 0

Icq: 262121621
ответов: 91
вопросов: 11


а как бы этот запрос выглядел при помощи WebClient? :)
 
Ответ # 9 # дата добавления: 11.07.2010 / 23:16
Автор ответа:
Aleksey Nemiro
тем: 462/ответов: 2915/благодарностей: 39
Администратор
Эксперт

Url: aleksey.nemiro.ru
Icq: 261779681
Skype: alekseynemiro
ответов: 2915
вопросов: 462


см. методы с суффиксом Async
Например, myWeb.UploadStringAsync
И события UploadProgressChanged, UploadStringCompleted, можно только одно из них, т.н. последнее.
Добавлять через AddHandler
AddHandler myWeb.UploadStringCompleted AddressOf myWeb_UploadStringCompleted
myWeb_UploadStringCompleted - это функция, имя может быть любым.
с атрибутами sender As Object и e As UploadStringCompletedEventArgs, по аналогии с обработчиками событий обычных контролов WinForms.
в UploadStringCompletedEventArgs можно узнать url и еще что-то.
--
@aleksey_nemiro

- Нашел ответ самостоятельно, расскажи всем!
- Анонимус загрузи фотку, тебя не видно!
- Незабываем нажимать на Спасибо (пометить ответ, как правильный)! ;-)
- Помни: Одна тема - один вопрос!
- Kbyte Bonus Points ($$$) за вопросы и ответы на форумах Kbyte.Ru ... (Уже выдано!)

[- Изменить подпись | Личное сообщение админу | Искать друзей | Пригласить друзей | Чииииз :-) | Web-инструменты | Слоны | Деньги -]
 
Ответ # 10 # дата добавления: 11.07.2010 / 23:22
Автор ответа:
spiller
тем: 11/ответов: 91/благодарностей: 0

Icq: 262121621
ответов: 91
вопросов: 11



все, у меня паника.
пойду почитаю про многопоточность.
 
Ответ # 11 # дата добавления: 16.08.2010 / 20:57
Автор ответа:
spiller
тем: 11/ответов: 91/благодарностей: 0

Icq: 262121621
ответов: 91
вопросов: 11


Алексей, помогите пожалуйста сделать данный кусок при помощи WebClient.
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
013:
014:
015:
016:
017:
018:
019:
'собираем данные для POST запроса  
Dim req As HttpWebRequest = HttpWebRequest.Create("http://captcha.com/xml.php")  
req.Method = "POST"  
Dim xml As String = "<methodCall><methodName>ocr_server::analyze</methodName><params><param><base64>" & base64 & "</base64></param><param><string>" & CapLogin & "</string></param><param><string>" & CapPass & "</string></param><param><int>0</int></param></params></methodCall>"  
Dim ByteArr As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes(xml)  
req.ContentLength = ByteArr.Length()  
req.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)  
'делаем запрос  
Dim res As HttpWebResponse = req.GetResponse()  
'читаем ответ от сервера капчи  
Dim myStreamReader As New StreamReader(res.GetResponseStream, System.Text.Encoding.GetEncoding(1251))  
Dim myXml As New System.Xml.XmlDocument()  
myXml.LoadXml(myStreamReader.ReadToEnd())  
'достаем нужный код капчи из полученного Xml ответа  
For Each n As XmlNode In myXml.SelectNodes("/methodResponse/params/param/value/struct/member")  
        If n.SelectSingleNode("name").InnerText = "text" Then  
             Captcha = n.SelectSingleNode("value/string").InnerText  
       End If  
Next n  

Я вот начал, но не получается.
001:
002:
003:
004:
005:
006:
007:
008:
009:
Dim myWeb As New WebClient()  
AddHandler myWeb.UploadStringCompleted, New UploadStringCompletedEventHandler(AddressOf myWeb_UploadStringCompleted)  
Dim address As New Uri("http://captcha.com/xml.php")  
'собираем данные, которые будем отправлять  
Dim xml As String = "<methodCall><methodName>ocr_server::analyze</methodName><params><param><base64>" & base64 & "</base64></param><param><string>" & CapLogin & "</string></param><param><string>" & CapPass & "</string></param><param><int>0</int></param></params></methodCall>"  
Dim ByteArr As Byte() = System.Text.Encoding.GetEncoding(1251).GetBytes(xml)  
Dim data As New StringBuilder  
'делаем запрос  
myWeb.UploadStringAsync(address, data.ToString)  
 
Реклама  
Страница: 1 + Добавить ответ | + Создать новую тему