|
Корректно ли запускаю поток с кучей параметров и дожидаюсь его завершения?
|
|||
---|---|---|---|
#18+
Решил таки поиграться с потоком на простом примере. Вроде все получилось но решил проконсультироваться. Задача такая. Есть ф-ция тестирования pop3 сервера: Код: vbnet 1. 2. 3. 4. 5.
С параметром m_TestMode=True она просто делает тест: типа коннектится к серверу, дает какие-то команды типа STAT, LIST, NOOP, потом дисконнектится. m_TraceFunction -отвечает за вывод куда скажу. Чего хочу 1) запустить GetMail в отдельном потоке, чтоб не блочила в частности вывод процесса 2) выводить результат в TextBox на форме 3) Чтоб форму нельзя было закрыть, пока GetMail работает(макс. таймаут=60сек, если совсем жо*а) 4) Разрешить закрыть форму по завершению работы Собственно вот чего получилось: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48.
1) Корректно ли я стартую "поток с параметрами"? 2) Корректно ли я передаю параметры? Я использую массив param As Object(), при этом Object-ы разнородные: String, Integer, Boolean - эдакая каша. 3) Корректно ли я делаю Invoke-и в вызывающий поток. Я их делаю (1) чтоб писать Trace в текстбокс, (2) чтоб выполнить действия по завершению потока, а именно разрешить закрыть форму. 4) Могу ли я быть уверен что поток сразу завершится после Me.Invoke(New EnableExitDelegate(AddressOf EnableExit)), грубо я из-под потока делаю действия которые по-хорошему должны быть сделаны сразу после его завершения. (Я пробовал делать .Join после .Start но получил мертвый висяк на всегда, да и не хочу я форму полностью блочить, заблочить бы ее конечно можно было и без потока, но при этом страдает качество непрерывного вывода протокола событий в TextBox). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2015, 02:59 |
|
Корректно ли запускаю поток с кучей параметров и дожидаюсь его завершения?
|
|||
---|---|---|---|
#18+
Дмитрий771) Корректно ли я стартую "поток с параметрами"?Если есть возможность лучше использовать асинхронные операции, чем создавать поток самому. Для управления асинхронными операциями удобно использовать Task+async+await. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2015, 04:43 |
|
Корректно ли запускаю поток с кучей параметров и дожидаюсь его завершения?
|
|||
---|---|---|---|
#18+
Алексей Кесть возможность лучше использовать асинхронные операции Допустим. А у меня в этом примере такая возможность есть? В System.Net.Mail например есть .Send, а есть .SendAsinc, но это "штатный .Net класс", не знаю как он устроен. CallBack то конечно штука хорошая. А здесь "моя" функция. И как сказанное соотносится с совместимостью с .Net2 (коей я пока строго придерживаюсь, дальше видно будет). ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2015, 05:15 |
|
Корректно ли запускаю поток с кучей параметров и дожидаюсь его завершения?
|
|||
---|---|---|---|
#18+
Дмитрий77Алексей Кесть возможность лучше использовать асинхронные операции Допустим. А у меня в этом примере такая возможность есть? В System.Net.Mail например есть .Send, а есть .SendAsinc, но это "штатный .Net класс", не знаю как он устроен.MSDN? :-) Дмитрий77CallBack то конечно штука хорошая. А здесь "моя" функция.Ну обычно "моя функция" и указывается в качестве callback. :-) Дмитрий77И как сказанное соотносится с совместимостью с .Net2 (коей я пока строго придерживаюсь, дальше видно будет).Task появился в .Net 4. async/await появился в .Net 4.5 Без них работать с асинхронностями очень неудобно. В .Net 2 BackgroundWorker может помочь. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.05.2015, 07:34 |
|
|
start [/forum/topic.php?fid=20&msg=38962152&tid=1401539]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 151ms |
0 / 0 |