2013-05-31 2 views
0

В моем приложении на C# я создаю новую форму в своем приложении, которая имеет свой собственный объект System.Forms.Timer. В первый раз, когда я создаю форму, все работает нормально, я получаю таймеры, никаких проблем. При определенном условии я должен убить форму и создать новый (такой же) объект формы. Форма создается аналогичным образом. Форма загружена правильно, таймер инициализирован правильно, но таймер не отмечает. Я пробовал разные подходы, такие как остановка и удаление объекта таймера и создание нового в FormLoad, но тщетно. Мой друг предположил, что, возможно, мой новый объект формы не получает сообщений таймера Windows (WM_TIMER). Как проверить, работает ли цикл сообщений в моем новом объекте формы? Что я делаю неправильно?Почему оконные таймеры перестали работать?

Короче говоря, воссоздание объекта формы отключает таймеры. Пожалуйста, порекомендуйте.

Код Пояснения и распространения. Я постараюсь разместить столько, сколько смогу.

Код для создания новой формы объект

Form f = ReflectUtils.CreateClassFromAssembly(_TheAssembly, FormName) as Form; 
if (null == f) 
{ 
    throw new ApplicationException("Failed to create Form: {"); 
} 
_GUICancelEventHandler = new CancelEventHandler(GUIControlForm_Cancel); 
f.Closing += _GUICancelEventHandler; 

f.Show(); 

код для уничтожения образуют

f.Close(); 
f.Dispose(); 

Приложение использует тот же код для создания новых объектов формы.

код конструктора для таймера

this.timer1 = new System.Windows.Forms.Timer(this.components); 
this.timer1.Interval = 500; 
this.timer1.Tick += new System.EventHandler(this.timer1_Tick); 

внутри formLoad события

timer1.Start(); 

Надеется, что это помогает.

+9

Пожалуйста, покажите код, который у вас есть. – DonBoitnott

+0

Я добавил код. Из-за его реализации я не уверен, насколько это будет полезно. Наверное, я просто пытаюсь понять общее поведение таймеров окон, если есть что-то очевидное, что я пропускаю. – Alok

ответ

2

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

Я хотел бы предложить,

Вместо того, чтобы таймер в вашей форме, поддерживать таймеры в отдельном классе, так что он не будет быть утилизированы с формой, которую вы собираетесь убить.

Доступ к таймерам (запуск, остановка, сброс, обработка событий) с использованием объекта этого класса.

+0

Спасибо. Думаю, я мог бы заменить мой таймер форм на объект класса System.Timers.Timer. Попробуй это. – Alok

+0

@Alok Не просто замените, но, как сказал Бхарат, переместите его в свой собственный класс, который будет создан отдельно. Если он все еще находится в форме, он умирает с формой. – DonBoitnott

+0

Я в порядке, если он умирает с формой, если он создан правильно, когда создается экземпляр новой формы. Я не понимаю, почему таймер не будет работать, если новый объект таймера будет создан правильно. – Alok

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