VB.Net アプリケーションで奇妙なハングの問題が発生しています。ユーザーが更新ボタンをクリックすると、以下がスレッドとして実行され、データに対して長い計算が行われます。コントロールを無効にし、「作業中...」テキスト ボックスを表示し、作業を行い、コントロールを再度有効にして、「作業中...」テキスト ボックスを取り除きます。ときどき (デバッグ中に再現したことはありません)、ユーザー ウィンドウがフリーズしてハングします。CPU 使用率が 0 になると、計算は完了しますが、ウィンドウが完全にスタックして更新されませんが、コントロールは無効として表示され、[作業中...] テキスト ボックスは表示されたままになります。これは無期限にこのままになります (ユーザーは 30 分まで待機しようとしました)。奇妙なことに、私は「剥がす」ことができます タスクバーのウィンドウの右クリックメニューから最小化/復元ボタンをクリックするだけで、ウィンドウを復元できます。しばらくすると、ウィンドウが元に戻ります。ウィンドウ自体の最小化/復元は効果がないようです。
私の質問ですが、以下のスレッドで何が間違っていますか?
Dim Thread As New Threading.Thread(AddressOf SubDoPriceUpdateThread)
Thread.Start()
スレッド:
Private Sub SubDoPriceUpdateThread()
Dim Loading As New TextBox
Try
CntQuotePriceSummary1.Invoke(New Action(Of Control)(AddressOf CntQuotePriceSummary1.Controls.Add), Loading)
CntQuotePriceSummary1.Invoke(New Action(Sub() CntQuotePriceSummary1.Enabled = False))
Loading.Invoke(New Action(AddressOf Loading.BringToFront))
Loading.Invoke(New Action(Sub() Loading.Text = "Working..."))
'***Long running calculations***
Invoke(New Action(AddressOf FillForm))
Finally
CntQuotePriceSummary1.Invoke(New Action(Of Control)(AddressOf CntQuotePriceSummary1.Controls.Remove), Loading)
CntQuotePriceSummary1.Invoke(New Action(Sub() CntQuotePriceSummary1.Enabled = True))
Loading.Invoke(New Action(AddressOf Loading.Dispose))
End Try
End Sub