|
■No101086 (魔界の仮面弁士 さん) に返信
魔界の仮面弁士さん、ご連絡ありがとうございます。
> Overrides Sub Dispose(Boolean) は自動生成されるコードですよね?
すみません、大変失礼致しました。他のフォームにも同じように入っておりました。
> Form に「コンポーネント」(Timer や BackgroundWorker 等)を貼っている場合は、そのコードが必要です。
> 「コントロール」(TextBox や ListBox 等)だけしか貼っていない場合は、Dispose のオーバーライドを
> 行わなくても問題無いですが、わざわざ自動生成コードを削る意味は無いでしょう。
フォームに貼ってあるのは、Label と Timer のようです。
フォームのLoad処理で、以下のようにしておりました。
AddHandler Timer.Tick, AddressOf Timer_Tick
こちらですが、サービス処理のタイムアウト対策目的で呼び出しているようです。
> …で、気になるのはそのメインフォームの役割。
>
> 非表示のままにしている、という点は別に構いませんが、InitializeComponent すら
> 呼んでいないということは、デザイナコードは未使用のはずですし、そうすると
> 待機処理をどこに書いているのだろう、という不安がありました。
>
> 先のエラーメッセージで、CreateHandle 中の ObjectDisposedException 例外が見えているので、
> 「待機処理を Sub New で行っているのではあるまいか…」という疑念です。
> 要するに、何らかのロード処理(OnLoad メソッドのオーバーライド、または Load イベントの処理)が
> 終わっていない状況で Form が破棄されていて、それがエラーの原因になったのではないか、と。
フォームのLoad処理は、以下の内容になっているのですが・・・
この作りに問題があるのでしょうか?
すみません、他人が作成したプログラムに肉付けしてる状況で理解が追い付いていないところがあります。
Private Sub frmMain_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim strErrMsg As String = ""
AddHandler Timer.Tick, AddressOf Timer_Tick
'待機状態
Cursor.Current = Cursors.WaitCursor
Try
If LoadProcess(strErrMsg) = False Then
If Not String.IsNullOrEmpty(strErrMsg) Then ShowMessage(strErrMsg, MessageBoxIcon.Exclamation)
Return
End If
Catch ex As Exception
'エラーが発生しました。
ShowMessage(ex.Message, MessageBoxIcon.Exclamation)
Finally
Try
Me.Close()
Catch ex As Exception
MsgBox(ex.Message, MessageBoxIcon.Exclamation)
End Try
End Try
End Sub
|