DOBON.NET DOBON.NETプログラミング掲示板過去ログ

動的なコントロールの生成について

環境/言語:[環境:Windows XP sp2 言語:VB2005]
分類:[.NET]

お世話になります。
初心者の質問で申し訳ないのですが、VB2005のWindowsアプリケーションで以下のようなコードを
実行した場合、タイマーイベントが発生し続けてしまいます。
タイマーのインスタンスは、ロードイベント内でローカル変数として生成している為、
スコープを抜けた段階でガベージコレクトの対象になるので、
Tickイベントは発生しないと思っていたのですが、理由がわかりません。
ちなみにTimer_Tick内で強制的にGC.Collect()を呼び出しても変わりませんでした。(>_<)
どなたかお詳しい方、ご教授よろしくお願いします!

--------------------------以下コード----------------------------------------
Public Class Form1

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim tm As New Timer
tm.Enabled = True
tm.Interval = 3000
AddHandler tm.Tick, AddressOf Timer_Tick
tm = Nothing
End Sub

Private Sub Timer_Tick(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("タイマーテスト")
End Sub

End Class
System.Windows.Forms.Timer は、Enabled が true の間は GC の対象になりません(Enabled プロパティの解説に書かれています)。

DOBON.NET | プログラミング道 | プログラミング掲示板