Compact Framework では、System.Windows.Forms.Timer クラスは system.componentmodel コンストラクターをサポートしていません。
新しい Timer() がサポートされています: http://msdn.microsoft.com/en-us/library/aa335543(v=vs.71).aspx
新しいタイマー (IContainer コンテナー) はサポートされていません: http://msdn.microsoft.com/en-us/library/aa335544(v=vs.71).aspx
これは、CF アプリのフォームにタイマーを追加しても、フォームの IContainer コンポーネント フィールドに追加されないため、フォームが dispose()d のときに auto-dispose()d を取得しないことを意味します。
これがサポートされていないのはなぜですか?
フォームが破棄されたときにタイマーを破棄するにはどうすればよいですか? 私には2つの主なオプションがあるようです:
- フォームの dispose() メソッドを .designer.cs からメインの .cs ファイルに移動し、そこに手動の「_timer.dispose()」呼び出しを追加します
- または、InitializeComponent() が呼び出された後、フォームの作成時に Timer オブジェクトをコンポーネント コレクションに手動で追加します。
どちらを優先する必要がありますか? これら 2 つのうちの 1 つを忘れると、Timer は永遠に存続し、フォームを存続させます (Timer は GC できず、フォームの Timer_Tick() メソッドへの参照を保持しているため、フォームは GC されません)。 )。
この実装の決定は、注意する必要がある CF マシンでのタイマーとディスポに関する奇妙さを反映していますか?