ShowDialog メソッド

このスレ。→ @IT:VB2005でSub MainからFormのShow
ShowDialog メソッドはこれですね。→Form.ShowDialog メソッド
さてさて、ShowDialog メソッドもメッセージループが開始されるわけですよね?なので以下のように書けますですね。


[Visual Basic]


Imports System
Imports System.Windows.Forms


Public Class Program


Public Shared Sub Main()


Using f1Dialog As New Form1

f1Dialog.ShowDialog() ' メッセージループが開始されるわん。

End Using

Using f1Run As New Form1

Application.Run(f1Run) ' メッセージループが開始されるわん。

End Using


End Sub


End Class

ここで以前、Application.Runをゴソゴソしていた時に同一スレッド内でApplication.Runを重ねると、InvalidOperationException が発生したことを思い出しました。

単一スレッド上で 2 回目のメッセージ ループを開始することは有効な操作ではありません。Form.ShowDialog を使用してください。
ならShowDialog→Application.Runはどうよ?

[Visual Basic]


Imports System
Imports System.Windows.Forms


Public Class Program


Public Shared Sub Main()

Using f1 As New Form1

f1.ShowDialog()

End Using

End Sub


End Class


Public Class Form1
Inherits Form


Private Sub Form1_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load

Using f1 As New Form1

Application.Run(f1)

End Using

End Sub


End Class

InvalidOperationExceptionが発生さ。・・・ダメかぁ。Form.ShowDialogがメッセージ ループがらみで独自の実装ってことはなさそうだし、中身はどっかでおんなじ処理を噛んでそうなんですが・・・何かしら分岐があるのかなぁ。

単一スレッド上で 2 回目のメッセージ ループを開始することは有効な操作ではありません。Form.ShowDialog を使用してください。
ってことはForm.ShowDialogは「単一スレッド上で 2 回目のメッセージ ループを開始する」のとは違うのか・・・。単一スレッド上ではないってことかしら?