Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 | 2 |

 

  Вопрос: Работа в разных потоках Добавлено: 23.11.09 12:03  

Автор вопроса:  fifa36
Добрый день! Подскажите как организоапть работу чтобы форма не висла при исполнении программы.

Ответить

  Ответы Всего ответов: 17  

Номер ответа: 1
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #1
Добавлено: 23.11.09 12:28
Не знаю как на VB, но на C# я делаю так:

  1.   
  2.          new System.Threading.Thread(new System.Threading.ParameterizedThreadStart(delegate
  3.             {
  4.                 //Здесь то, что будет выполняться в отдельном потоке
  5.             })).Start();

Ответить

Номер ответа: 2
Автор ответа:
 maza_____



ICQ: 9968842 

Вопросов: 40
Ответов: 337
 Web-сайт: vkontakte.ru/id25563295 добавляйтесь в друзья))
 Профиль | | #2
Добавлено: 23.11.09 13:51
  1.  
  2. Dim potok as new threading.thread(adressof gg)
  3. Private sub gg()
  4. messagebox.show("Hello World!")
  5. end sub
  6. potok.start()
  7.  
  8.  

Ответить

Номер ответа: 3
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #3 Добавлено: 23.11.09 16:48
спасибо! а как все таки это в VBA выглядит, если это вообще возможно?

Ответить

Номер ответа: 4
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #4
Добавлено: 23.11.09 20:38
В VBA это выглядит чуть-чуть страшнее и неглючит чуть-чуть меньше.

Ответить

Номер ответа: 5
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #5 Добавлено: 24.11.09 13:23
но какая хотя бы конструкция, хотя бы в VB не обязательно VBA

Ответить

Номер ответа: 6
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #6
Добавлено: 24.11.09 13:32
в ВБА лучше использовать таймер :)

Ответить

Номер ответа: 7
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #7 Добавлено: 24.11.09 14:38
А разве если запускать в процедуре таймера форма виснуть не будет?

Ответить

Номер ответа: 8
Автор ответа:
 VβÐUηìt



Вопросов: 246
Ответов: 3333
 Web-сайт: смекаешь.рф
 Профиль | | #8
Добавлено: 24.11.09 16:12
Смотря как извратиться. Например, вместо
  1.  
  2. For i = 0 To 100
  3. 'Код
  4. Next


написать в таймер:
  1.  
  2. Private Sub Timer1_Timer()
  3. Static i As Long
  4. 'Код
  5. i = i + 1
  6. If i > 100 Then Timer1.Enabled = False
  7. End Sub

Ответить

Номер ответа: 9
Автор ответа:
 Millenium



ICQ: 629966 

Вопросов: 118
Ответов: 903
 Web-сайт: www.aliyev.us
 Профиль | | #9
Добавлено: 24.11.09 16:22
Таймер на то и таймер чтоб форма не висла. Таймер независимот от программы будет выполнять свой код.

Ответить

Номер ответа: 10
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #10 Добавлено: 24.11.09 16:51
Только по-моему в VBA нет контрола Timer, нужно через API:
  1. Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long

Ответить

Номер ответа: 11
Автор ответа:
 AngryBadger



Вопросов: 33
Ответов: 245
 Профиль | | #11 Добавлено: 24.11.09 17:02
А если целиком, то:
  1. Public Declare Function SetTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long, ByVal uElapse As Long, ByVal lpTimerFunc As Long) As Long
  2. Public Declare Function KillTimer Lib "user32" (ByVal hwnd As Long, ByVal nIDEvent As Long) As Long
  3.  
  4. Public elpTm As Long
  5. Public tmrID As Long
  6. Sub main()
  7.    tmrID = SetTimer(&H0, &H0, 1, AddressOf tmrPrc) 'Единицу поменяй на нужное тебе значение
  8. End Sub
  9.   
  10. Sub tmrKill()
  11.  KillTimer &H0, tmrID
  12. End Sub
  13.   
  14. Public Sub tmrPrc(ByVal hwnd As Long, ByVal uMsg As Long, ByVal idEvent As Long, ByVal dwTimer As Long)
  15. 'Тут твой код
  16. elpTm = elpTm + 1
  17. If elpTm = 1000 Then
  18.     tmrKill
  19.     elpTm = 0
  20. End If
  21.  
  22. End Sub

Ответить

Номер ответа: 12
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #12 Добавлено: 25.11.09 09:23
понял! спасибо большое, воспользуюсь! а просто в VB есть конструкция для создания отдельного потока? или разработчиками предполагалось что для этих целей будет использоваться таймер?

Ответить

Номер ответа: 13
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #13 Добавлено: 25.11.09 09:26
для целей не зависания формы!)

Ответить

Номер ответа: 14
Автор ответа:
 Artyom



Разработчик

Вопросов: 130
Ответов: 6602
 Профиль | | #14 Добавлено: 26.11.09 11:13
Там не будет потоков, таймер про который вы говорите будет работать в потоке приложения и код будет блокировать окно во время своей работы

Ответить

Номер ответа: 15
Автор ответа:
 fifa36



Вопросов: 33
Ответов: 116
 Профиль | | #15 Добавлено: 26.11.09 11:22
Artyom как же тогда сделать чтобы не висла форма????

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам