mmbguide Ответов: 2

Почему таймер останавливается при открытии диалогового окна?


привет

У меня есть этот код в моей основной форме:

CheckForIllegalCrossThreadCalls = False
Dim CountTrafficThread Как Новая Резьба.Таймер (Новая Резьба.TimerCallback( AddressOf CountTraffic), Nothing, 0, 500)


он работает хорошо, но, когда я вызываю диалоговое окно из этой формы, таймер останавливается, и счетчик не может считать. Если я использую объект Timer из toolbox, он работает хорошо даже после вызова диалогового окна.

пожалуйста, помогите мне.

спасибо

Что я уже пробовал:

Просто поищите в интернете, чтобы найти решение

[no name]

"CheckForIllegalCrossThreadCalls = False", вероятно, одна из худших вещей, которые вы можете сделать.

2 Ответов

Рейтинг:
2

Dave Kreskowiak

CheckForIllegalCrossThreadCalls = False

Удалите эту строку кода и забудьте о ее существовании. Вы настраиваете себя на ошибки, которые очень трудно воспроизвести и исправить.

Таймер не останавливается. Он все еще работает. Проблема в том, что в вашем коде поток, в котором запускается событие таймера, заблокирован диалогом, поэтому поток не может ничего сделать до тех пор, пока диалог не будет отклонен.

Как это исправить? Не знаю. Мы можем видеть только две строки кода, и мы ничего не знаем о дизайне вашего кода. Но, учитывая, что вы вставили строку CheckForIllegalCrossThreadCalls, ваш код, вероятно, придется переписать, чтобы делать все правильно, а не латать дерьмо вместе, чтобы заставить его работать неправильно.


Рейтинг:
10

mmbguide

спасибо

Я удалил "CheckForIllegalCrossThreadCalls = False"

вот остальная часть кода:

Sub CountTraffic(byval var As Object)
_CountUnauthorized +=1
Конец Подводной Лодки

это был тестовый проект для работы с потоком.

"_CountUnauthorized" - это переменная уровня формы. поскольку я удалил эту строку, я поместил значение в переменные уровня формы и с помощью объекта Timer прочитал переменные и показал в метке. но как я могу решить эту проблему?

извините, что я новичок в потоке...

спасибо


[no name]

"как я могу решить упомянутую проблему", вы можете *подумать*, что упомянули проблему, но это не так.
И это не решение.
"Я новичок", я знаю, что в это трудно поверить, мы можем сказать. Нет необходимости говорить об этом людям.