別の質問への回答によると、VB ユーザー インターフェイスを作成したスレッドがビジー状態の場合、VB ユーザー インターフェイスは更新できません。したがって、通常、大きな計算ジョブをバックグラウンド タスクで実行する必要があるのはなぜですか。
ここで何が不可解なのかを説明します。次のコードがあります。このように、インプロセス COM を介して呼び出されます。
- クライアントの呼び出し
showform()
- クライアントは大量の作業を行い、その過程で独自の UI をフリーズします
- クライアントは作業を終了し、独自の UI の更新に戻ります
ステップ 2 では、VB フォームはそこにありますが、フリーズしています。対話することはできません。手順 3 で、VB フォームが使用可能になります。しかし、これはなぜですか?実行のスレッドはクライアントに返されましたか? クライアントが何らかの方法でフォームのイベントを処理している場合、処理するイベントとその送信先をどのような魔法で知っているのでしょうか?
<ComClass(ComClass1.ClassId, ComClass1.InterfaceId, ComClass1.EventsId)> _
Public Class ComClass1
Public Sub New()
MyBase.New()
End Sub
Private f1 As Form1
Public Sub showform()
f1 = New Form1()
f1.Show()
End Sub
End Class