Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
уважаемые, помоги разобраться со следующей проблемой: требуется печатать квитанции и одновременно сканировать их штрих-код. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. как я понимаю, проблема заключается в Application.DoEvents(); зы. странность всего происходящего в том, что такая система успешно работала, довольно продолжительное время. Я переписал контрол, с целью повышения юзабильности, не внося, вроде, принцыпиальных изменений (изменился состав контролов на форме) зыы. и еще, если отключить печать и произвести тестирование сканера, то остановка процесса происходит корректно, при нажатии соответствующих кнопок. Но если в цикле поставить счетчик количества отсканированных квитанцый и при достижении определенного количества вызвать PauseBtn_MouseDown (пауза в печати), тогда, после выхода из процедуры происходит возврат в нее же!! зыыы. пока писал все это, до меня вроде дошло, что может возвращать обратно в цикл: во втором пропущенном участке кода у меня есть такая строка printList.SetItemChecked(indexChecked, false); зыыыы. да, и последний вопрос: корректен ли сам подход к решению задачи? если нет, то как лучше реализовывать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2004, 17:32 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
друзья!! подскажите куда копать?! зы. или лень вникать? ззы. я же... до меня вроде дошло, что может возвращать обратно в цикл: во втором пропущенном участке кода у меня есть такая строка printList.SetItemChecked(indexChecked, false);от этого избавился, глюк не устранился зззы. ответьте хотябы на вопрос о корректности подхода к решению... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 14:28 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
Привет, Профиль! :-) Хмм... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 17:20 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
привет, Роман! может это и не совсем корректно, но эта строчка не может чисто физически зациклить, т.к. после обнуления вызовется еще раз обработчик, но на эту строчку он уже не попадет (по вышестоящему условию в if) строку я выкинул, т.к. все равно она обнулится по таймеру... есть еще какие-либо предположения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 18:10 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
забыл упомянуть: если я пытаюсь поймать глюк в отладчике - все проходит как и задумывалось... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 18:22 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
> есть еще какие-либо предположения? Да. Сразу бросается в глаза конструкция, которая пожирает все свободные ресурсы процессора: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Используй семафоры, что бы разрулить ситуацию. Посмотри в сторону класса WaitHandle и его производных. Да. И вот еще - что это за сканер такой, что для него надо устанавливать фокус ввода на элемент tbParcelNum? Он вместо клавиатуры подключается? Может есть возможность использовать более правильный сканер, интерфейс которого позволяет получать данные в виде потока? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 20:48 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
да, сканер подключается параллельно с клавиатурой, другой предоставить не могут, поэтому и приходится фокус ставить. про WaitHandle посмотрю, спасибо ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2004, 23:38 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
мдя... странно все это... сегодня случайно запустил процесс - все прошло корректно... причем в пятницу все было плохо... видать тяжелая была неделя //проверка корректности штрих-кода была убрана из обработчика tbParcelNum_TextChanged но раз уже начал разбираться, тем более мне всегда не нравилась конструкция с DoEvents() 2 Роман посмотрел я WaitHandle и его производные, в часности ManualResetEvent но как-то не могу въехать, как мне организовать процесс... не могли бы поделиться советом? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.12.2004, 17:59 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
Примерно так: Код: plaintext 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. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 10:46 |
|
||
|
где грабли?! Application.DoEvents();
|
|||
|---|---|---|---|
|
#18+
>>>> где грабли?! Я бы сказал так - первоначально написанный кусок - одна сплошная грабля. Всвязи с дурацким интерфейсом сканера здесь надо жестко разруливать межпроцессное взаимодействие. На твоем месте я вообще распихал бы все задачи (печать, проверку считанного кода, сбор вводимых данных с клавиатуры (сканера), общее управление процессом) по разным thread'ам и рулил бы дальше с помощью семафоров. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 28.12.2004, 11:14 |
|
||
|
|

start [/forum/topic.php?fid=20&fpage=985&tid=1437563]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
24ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
| others: | 220ms |
| total: | 330ms |

| 0 / 0 |
