5.6.の解釈が間違ってるよ。
イベントを受け取るのはオブジェクト(Form)であってスレッド(スレッドA)ではない。
スレッドBが通知したイベントのハンドラを実行するのはやっぱりスレッドB。
//そのためにInvoke/BeginInvokeが存在するわけで。

だから6.でイベントハンドラにてShowDialogで問題なし。