0

現在、WindowsフォームGUIを使用するアプリケーションに取り組んでいます。アプリケーションの主な作業は追加のスレッドで実行されますが、フォームの状態に依存する可能性があります。
このため、スレッドを作成する前に、フォームが完全にロードされていることを確認する必要があります。また、フォームが閉じ始める前に、スレッドが終了していることを確認する必要があります。

この問題の考えられる解決策は、OnShownandOnFormClosingメソッドをオーバーライドすることです。フォームのすべてのアセットがロードされた後にのみ
、メソッドが実際に呼び出されますか?OnShowそして、 -フォームが閉じる/破棄を開始する前にOnFormClosing、このメソッドで実行されるコードが実行されることを確認できますか?

4

3 に答える 3

2

Windowsフォームイベントは注意が必要な場合があり、発生する順序は信頼できません。たとえば、「Shown」イベントは、フォームが最初に表示されたときに1回だけ発生することを意味しますが、昨日、Form.Visibleフラグを適切なタイミングで操作することにより、そのイベントが発生しないようにする方法を見つけました。

ですから、あなたは自分のニーズについてかなり具体的にする必要があります。たとえば、「完全にロードされた」と言うとき、どういう意味ですか?コントロールが作成され、フォームが表示され、フォームコンストラクターの実行が終了しましたか?

同様に、FormClosingイベントは、メインのaUIスレッドで未処理の例外によって回避される可能性があります。その結果、イベントが発生せずにフォームが削除されます。

これらのイベントの周りには何も想定しないことをお勧めします。ワーカースレッドがフォームの状態が利用できない、または準備ができていないことに対処できるようにします。正確な要件を知らなければ、より具体的にすることは困難です。

于 2012-05-03T00:53:04.140 に答える
2

MSDNに投稿されているWinFormsイベントの順序をお読みになることをお勧めします。

http://msdn.microsoft.com/en-us/library/86faxx0d.aspx

于 2012-05-03T00:53:07.927 に答える
0

メインのWinFormのコンストラクターでInitializeComponentを使用し、OnLoad(すべてが読み込まれるたびに呼び出される)を使用しようとしましたか?

于 2012-05-06T17:06:18.113 に答える