###前提・実現したいこと
Invoke を理解したく「動作仕様」と「対処」について質問させて頂きました。
タイマーで定期処理を行うアプリケーション終了時、タイマーは止めているのに、Invoke に例外処理が発生してしまいます。(後述コードを参照願います。)
① 動作仕様を教えてください。
アプリケーション終了時、if ( null == timer ) がブレイクに引っかからずに this.Invoke(…) で例外エラーが出るので、form1 のインスタンスはなくなっていると判断しました。
この例外ではform1 のインスタンスがないのに、Invoke で指定している関数を処理していると考えて良いでしょうか?
→Invokeはインスタンスが無いのに処理されるような機能なんでしょうか?
理解が正しいか質問させて頂きました。
② 対処について
下記コードを修正して this.Invoke(…) を try catch にすることで、
例外を catch 出来ることは確認しているのですが、
コードとしてはそもそもアプリケーション終了時に、例外を発生させないようにするべきではないかと考えております。
何か方法をご存知の方、アドバイス頂けないでしょうか?
###発生している問題・エラーメッセージ
アプリケーションを終了させると、以下のエラーが発生します。
型 'System.ObjectDisposedException' の例外が System.Windows.Forms.dll で発生しましたが、ユーザー コード内ではハンドルされませんでした
###該当のソースコード
using System; using System.Timers; using System.Windows.Forms; partial class Form1 { /// プロジェクト生成時のコードは省略 protected override void Dispose(bool disposing) { if (timer != null) { timer.Stop(); timer.Dispose(); timer = null; } if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } } public partial class Form1 : Form { public Form1() { InitializeComponent(); // タイマーの生成 timer = new System.Timers.Timer(); timer.Elapsed += ElapsedTimer; timer.Interval = 5; // タイマーを開始 timer.Start(); } private delegate void UpdateTextDelegate(); private void ElapsedTimer(object sender, EventArgs e) { if ( null == timer ) { return; } this.Invoke(new UpdateTextDelegate(UpdateText)); } private void UpdateText() { textBox1.Text = "test." }
###補足情報(言語/FW/ツール等のバージョンなど)
visual studio 2015
.NET Framework 3.5
①と②についてアドバイスを頂きたく、よろしくお願い申し上げます。
【修正】
コードに記載のないメソッドを用いていましたので、削除しました。
すみません。

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/05/04 13:33
2017/05/04 14:07
2017/05/04 15:28
2020/02/19 23:37