2007/08/27(Mon) 19:09:24 編集(投稿者)
2007/08/27(Mon) 19:08:40 編集(投稿者)
2007/08/27(Mon) 17:53:57 編集(投稿者)
前身スレッド■No6760 でお世話になりました (困ったちゃん) です。
■No6887 (れい さん) を引用
> formCloseチェックを潜り抜け、Invokeに入った後に
> Formが閉じられ、Nyaruruさんの言う間違ったスレッド終了チェックが行われれば
> 止まります。
■No6921 (えムナウ さん) を引用
> それならばformCloseチェックとform_Closingイベント処理中でロックかけたらどうでしょうか?
> フォームがクローズされた後でNotingにクリアされる前にInvokeされることが原因だと思いますので。
「ロック」という言葉にインスパイアされて■No6876 のコード(前身スレッドの■No6822 と本質は同じ)
にちょっと姑息な修正を。
Closing イベントハンドラで Me.Close を BeginInvoke します。
これなら、溜まった Invoke が片付いた後に Close が実行されます。
本スレッドのテーマの『Control.Invokeが使えるか』からは逃避しているだけですけど。
Private Sub Form2_FormClosed(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosedEventArgs)
If Not formClose Then
formClose = True
Me.BeginInvoke(New System.Threading.ThreadStart(AddressOf Me.Close))
e.Cancel = True
End If
End Sub