2010-04-18 4 views
0

У меня есть настраиваемый элемент управления, основной целью которого является извлечение данных. Я хочу добавить метод ScheduleUpdate (int milliSeconds) к элементу управления, который заставит обновление X миллисекунд с этого момента.Экземпляр Windows.Forms.Timer и пользовательский интерфейс

Поскольку это все GUI-земля, я должен использовать Windows.Forms.Timer, но как этот экземпляр таймера знает, к какому потоку принадлежит? Что делать, если приложение ScheduleUpdate() вызывается из потока, отличного от UI?

Должен ли я построить таймер в конструкторе Control? Или, возможно, событие Load? Или безопасно отложить строительство до тех пор, пока я не заберусь в ScheduleUpdate()?

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

ответ

1

Он знает, что он знает, на каком потоке он был создан. Существует невидимое вспомогательное окно, которое получает сообщение WM_TIMER, которое, в свою очередь, вызывает событие Tick. Окно имеет сходство потоков, цикл сообщения в потоке отправляет сообщение. Какой должен быть поток пользовательского интерфейса вашего приложения.

Убедитесь, что вы создали этот таймер в той же теме, что и форма и элементы управления. Просто добавьте его в форму или создайте в форме или конструкторе управления. Затем вам просто нужно установить для свойства Enable таймера значение true. Это поточно-безопасный, вы можете сделать это в потоке планировщика.

Смежные вопросы