|
Пауза в цикле
|
|||
---|---|---|---|
#18+
Всем доброго времени суток, Не подскажите в чем может быть косяк, требуется элементарное: программа получает список файлов в папке и последовательно каждый файл загружает в SQL Server, при последовательной обработке каждого файла необходимо что бы контрол Label на форме принимал значение наименования файла который грузиться в данный момент. Код метода собственно выглядит примерно так: Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
импортированные пространства имен: Imports System.Threading Imports System.Data.SqlClient Imports System.Xml Imports System.IO Проблема заключается в том, что когда вызывается данный метод, программа при наличии допустим 3 xml файлов в папке ждет 6 секунд, и потом разом выводит их в листбокс, т.е. последовательного появления в листбоксе через каждые 2 секунды файла нет. С чем это может быть связанно, уже перелазил кучу тем, грешил на многопоточность, но я нигде явно в программе не создаю отдельных потоков ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 19:55 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
связано с тем, что ты фактически вешаешь свой UI-поток на 6 секунд. Процесс нужно делать асинхронным и обновлять UI через Invoke ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 19:57 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
felix_ff, с тем, что ваш код работает в потоке GUI, то есть пока он не выполнится, GUI не обновится. Загружать надо в отдельном потоке. P.S. Делать задержки в цикле загрузки файлов это шедеврально ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 19:57 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
Pallaris, Прошу прощения, смысл я понял но пока не знаю как это реализовать, не могли бы Вы подсказать как будет выглядеть это в виде кода или где про это можно прочесть? Lelouch, задержки в процессе загрузки файла потом не будет :) Я написал паузы в цикле специально, для того что бы посмотреть что у меня происходит в процессе загрузки, потому что когда я запускал процесс загрузки Label никак не реагировал на изменение загружаемого файла ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 20:24 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
написал вот так: (на сколько я понимаю видимо чушь, раз не работает) Код: 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.
выдает исключение что я пытаюсь изменить объект созданный в другом потоке, я так понимаю что мне надо как то получить основной поток программы и вызвать SetProcessedFile в нем, но как правильно сделать? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 20:28 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
felix_ff, Pallaris имел в виду этот Invoke: http://msdn.microsoft.com/ru-ru/library/zyzhdc6b(v=vs.110).aspx Он есть в том числе и у формы ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 20:33 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
Lelouch, Pallaris, Большое спасибо за помощь ... |
|||
:
Нравится:
Не нравится:
|
|||
12.03.2014, 21:19 |
|
Пауза в цикле
|
|||
---|---|---|---|
#18+
felix_ff...надо как то получить основной поток программы и вызвать SetProcessedFile в нем... 1. Invoke нужно использовать там где есть доступ к визуальным контролам. Invoke предполагает, что код который вы ему подсунули будет выполнен в обработчике потока который создал эту форму (у которой или компонента которой вызвали Invoke). То есть, если вы ему всю функцию SetProcessedFile засунете, то это не будет отличаться от варианта без использования потока, и получатся те же задержки. ИМХО, правильно, сделать подобное в отдельном потоке, например backgroundWorker-е либо Task, а куски которые пишут в визуальный контрол, обернуть в Invoke. 2. вместо Thread.Sleep() для прорисовки интерфейса мне видится лучше использовать Application.DoEvents(); в шарпе это бы выглядело примерно так Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
... |
|||
:
Нравится:
Не нравится:
|
|||
13.03.2014, 09:21 |
|
|
start [/forum/topic.php?desktop=1&fid=20&tid=1403145]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
56ms |
get topic data: |
14ms |
get forum data: |
3ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 328ms |
total: | 483ms |
0 / 0 |