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

お役に立てれば。

4

1 に答える 1

2

フォームを強制終了する場合は、タイマーをフォーム インスタンスから独立させておくことをお勧めします。

私が提案するのは、

フォームにタイマーを配置する代わりに、別のクラスでタイマーを維持して、強制終了するフォームでタイマーが破棄されないようにします。

そのクラスのオブジェクトを使用してタイマー (開始、停止、リセット、ハンドル イベント) にアクセスします。

于 2013-05-31T11:18:23.740 に答える