タイトル : Re^3: Application.Exit()処理にて例外エラーが発生 投稿日 : 2017/11/09(Thu) 08:54 投稿者 : ふみぞう
ソースコードを確認したところ、以前のプログラム修正で、メニュープログラムのFormClosingイベントにて、プログラムを呼び出す処理を追加したのですが、そのイベントがあると例外エラーが発生するようです。試しにメニュープログラムのFormClosingイベントをコメントにして確認したところ、Application.Exit()処理にて例外エラーは発生しなくなりました。メニュープログラムの処理の流れを考え直してみたいと思います。 魔界の仮面弁士さん 頂いた情報を参考に解決できました。誠に有難う御座います。 > 魔界の仮面弁士さん、ご返答頂き有難う御座います。 > > > その一年の間に、ソースコードまたは実行環境あるいは取り扱うデータなどに > > 何らかの変化があったのだと想像しますが、それが何であるのかは > > 第三者には調査できないと思います…。 > > > > 上記の件ですが、今回例外エラーの発生したプログラムは、導入当初から変更されていません。但しソリューションの中にある別のプログラムは変更しております。最初に書かなかったのですが、該当の処理はメニュープログラムから呼び出して、処理を行いその処理が終了した時に、アプリケーション自体を終了したくて、Application.Exit()処理を使って終了させていました。現象が発生するまでは問題なくアプリケーション終了していたのですが、急に例外エラーが発生するようになりました。 > > > それと、起動中のフォームがある場合は、Closingイベントや Closed イベントを > > 利用していないかどうかを確認してみてください。これらは旧式のイベントであるため、 > > Application.Exit 時に処理されません。(FormClosing / FormClosed は呼ばれます) > > > > > > また、ワーカースレッド(BackgrundWorker など)を利用しており、かつ、 > > そのスレッドの稼働中に Application.Exit を呼び出す可能性がある場合は、 > > 各スレッドの終了順序に依存するような設計になっていないかも確認してみてください。 > > 上記の件については、頂いた情報を参考にして調査してみます。 > > > > Application.Exit()処理にて、例外エラーが発生するようになった。 > > > 例外エラーのメッセージは、”コレクションが変更されました。列挙操作は実行されない可能性があります。”です。 > > > > その例外がどのコレクションを指しているか、調査はできていますか? > > > > この例外は多くの場合、For Each の処理中に、そのコレクションの要素が > > 増減したことを示します。(DataTable.Rows や、Application.OpenForms など) > > https://social.msdn.microsoft.com/Forums/ja-JP/444fc622-a5be-4064-874c-ebfd489fa47a?forum=vbgeneralja > > https://qiita.com/kojisaiki/items/d51ec24cc30fc09e7cab > > > > For Each 中にコレクションを増減させてしまうような処理が無いか、 > > また、列挙中の変数が、他のメソッドに ByRef 渡しされていないかなどを > > 確認してみてください。配列についても同様です。 > > > > > > > このプログラムは1年以上使用していて > > その一年の間に、ソースコードまたは実行環境あるいは取り扱うデータなどに > > 何らかの変化があったのだと想像しますが、それが何であるのかは > > 第三者には調査できないと思います…。 > > > > > > それと、起動中のフォームがある場合は、Closingイベントや Closed イベントを > > 利用していないかどうかを確認してみてください。これらは旧式のイベントであるため、 > > Application.Exit 時に処理されません。(FormClosing / FormClosed は呼ばれます) > > > > > > また、ワーカースレッド(BackgrundWorker など)を利用しており、かつ、 > > そのスレッドの稼働中に Application.Exit を呼び出す可能性がある場合は、 > > 各スレッドの終了順序に依存するような設計になっていないかも確認してみてください。 |