2013-05-31 49 views
0

在我的基於C#的應用程序中,我在我的應用程序中創建了一個具有自己的System.Forms.Timer對象的新窗體。第一次當我創建表單一切正常,我收到計時器滴答聲,沒有問題。在某些情況下,我必須殺死表單並創建一個新的(相同的)表單對象。表單以類似的方式創建。表格被正確加載,定時器被正確初始化,但是定時器不打勾。我嘗試了不同的方法,例如停止和配置計時器對象,並在FormLoad中創建一個新對象,但徒勞無功。我的朋友建議,可能我的新窗體對象不會收到Windows計時器消息(WM_TIMER)。我如何檢查消息循環在我的新窗體對象中是否工作正常?我做錯了什麼?爲什麼windows窗體計時器停止工作?

簡而言之,重新創建表單對象會以某種方式禁用計時器滴答。請指教。

代碼充滿了反思和傳播。我會盡可能地發佈信息。

代碼來創建一個新的表單對象

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(); 

應用程序使用相同的代碼來創建新的表單對象。 formLoad事件一絲希望

timer1.Start(); 

定時器

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

設計代碼這會有所幫助。

+9

請顯示目前爲止的代碼。 – DonBoitnott

+0

我已經添加了代碼。由於它的實現,我不確定它會有多大的幫助。我想我只是想了解Windows窗體計時器的一般行爲,如果有什麼明顯的東西我錯過了。 – Alok

回答

2

如果你要殺死你的表單,最好是讓定時器獨立於你的表單實例。

我建議,

而不是在你的表格計時器,保持在一個單獨的類定時器,使得它不會跟你要殺的形式佈置。

使用該類的對象訪問定時器(啓動,停止,重置,處理事件)。

+0

謝謝。我想我可以用'System.Timers.Timer'類對象替換我的Forms定時器。將嘗試一下。 – Alok

+0

@Alok不只是替換,而是像Bharath所說的那樣,將它移出到它自己的類中來分別實例化。如果它仍然在形式中,它會隨着形式而死。 – DonBoitnott

+0

我很好,只要它在創建新表單實例時正確創建,就會死在表單中。我不明白爲什麼計時器不能工作,如果一個新的計時器對象正確創建。 – Alok

相關問題