Страница: 1 |
|
Вопрос: Выполнение анимации во время обработки запроса
|
Добавлено: 25.05.11 17:38
|
|
Автор вопроса: WHorse
|
Здравствуйте!
В приложении имеется участок кода, в котором происходит доступ к ресурсу в Интернете. Поскольку задержка от запроса до выдачи результата иногда доходит до 10 секунд, в течение которых приложение не отвечает на запросы, подгружаю в имеющийся picturebox картинку с анимацией ожидания. Весь код, включая подгрузку изображения, обрабатывается по событию button_click (сначала изображение, затем запрос в Интернет).
Уже несколько часов не могу добиться эффекта. Т.е. анимация не отображается, форма подвисает, затем отображается результат. Если использовать один из textbox с надписью "загрузка..." - тот же результат - надпись не отображается.
Насколько я понял, VB не умеет интерпретировать запросы в событии последовательно, он обрабатывает событие целиком, и пока его не отработает, на ранние и поздние по списку участки кода не разделяет? Я думаю происходит следующее: событие интерпретируется целиком вплоть до конца sub, форма вешается, затем отображается текст в textbox "загрузка...", затем за доли секунды меняется на текст результата запроса (что оказывется незаметным глазу).
Пробовал разбивать на два потока. Дошел до момента: "Невозможно использовать один элемент управления одновременно в нескольких потоках" и плюнул на это дело...
Подскажите, в каком направлении думать?
Спасибо!
Ответить
|
Номер ответа: 5 Автор ответа: WHorse
Вопросов: 5 Ответов: 7
|
Профиль | | #5
|
Добавлено: 26.05.11 18:34
|
Вырезал необходимый для выполнения код отдельно в форму.
Button1 - кнопка
BackgroundWorker1 - фоновый процесс
PictureBox1 - графический контейнер (с анимированным изображением)
TextBox1 - текстовое поле
TextBox2 - текстовое поле
В текущем исполнении информация о выполнении поиска в TextBox2 отображается, анимация в PictureBox1 выполняется, форма не подвисает. Выдает ошибку доступа к TextBox2.
При выполнении комментированных строк (без BackgroundWorker1)информация о выполнении поиска в TextBox2 отображается, анимация в PictureBox1 отображается (зависает), форма подвисает. Выполняется без ошибок, но криво, по всей видимости AccessControl() выполняется вне пределах потока, его инициировавшего.
- Public Class Form3
-
- Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
-
-
-
- TextBox2.Text = "Подключаюсь к [www.vugone.info] ..."
- PictureBox1.Image = My.Resources.Loading_1
-
-
- Me.BackgroundWorker1.RunWorkerAsync()
-
- End Sub
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
- Try
- Dim VIN_URL As Net.HttpWebRequest = Net.HttpWebRequest.Create("http://www.vugone.info/base/find/?vin=" & TextBox1.Text)
- Dim VIN_Response As Net.HttpWebResponse = VIN_URL.GetResponse()
- Dim VIN_Stream As New IO.StreamReader(VIN_Response.GetResponseStream, System.Text.Encoding.GetEncoding("UTF-8"))
- Dim VIN_Line As String = VIN_Stream.ReadToEnd
- Dim VIN_Result_Nothing As New System.Text.RegularExpressions.Regex("Ничего не найдено")
- Dim VIN_Result_Found As New System.Text.RegularExpressions.Regex("Результаты поиска:")
- If (VIN_Result_Nothing.IsMatch(VIN_Line)) Then
- TextBox2.Text = "[www.vugone.info]" & vbCrLf & "Транспортное средство в угоне не числится."
- ElseIf (VIN_Result_Found.IsMatch(VIN_Line)) Then
- TextBox2.Text = "[www.vugone.info]" & vbCrLf & "Внимание! Транспортное средство числится в угоне!"
- Else
- Exit Sub
- End If
- Catch
- TextBox2.Text = "[Невозможно проверить транспортное средство на угон. Нет соединения с Интернетом.]"
- End Try
- PictureBox1.Image = Nothing
- End Sub
- End Class
Всё равно не получается создать делегат для Invoke (BeginInvoke) без зависания формы!
Ответить
|
Страница: 1 |
Поиск по форуму