チーム、
は私がデータベースにアップロードデータを行いVB.Net Windowsアプリケーションを構築しており、基本的に2つのコントロール更新:
1であるテキストボックスをデータベースレコードのアップロードごとに1行で常に更新されます。
2.アップロードされたデータベースレコードの数を記録するラベル。VB.Net Winフォームアプリケーション - UIの更新問題
スレッドのbgwWorker_DoWork()メソッドにアップロード用のビジネスロジックが含まれ、bgwWorker_ProgressChanged()がアップロードに基づいて2つのUIコントロールを更新するBackgroundWorker thread概念を使用しました。
しかし、私が直面している問題は、両方のUIコントロールで完全な更新が得られないということです。時々、スレッドは、テキストボックスの更新や、時にはラベルの更新をバイパスします。私は、各UIコントロールの更新コードの前にSystem.Threading.Thread.Sleep(25)を追加することで、この問題を解決できました。これは問題を解決する正しい方法ですか?私は行方不明の何かがありますか?
お勧めです。以下は
両方のこれらのメソッドのコードです:
Private Sub bgwWorker_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwWorker.DoWork
.................
.................
'Updates database record related update in textbox
System.Threading.Thread.Sleep(25)
updater.eventName = "UpdateStatusBox"
updater.errorMessageToLog = String.Empty
updater.errorMessageToLog += GetErrorMessage(dataTable(rowNumber)("Name").ToString(), ExceptionData)
bgwWorker.ReportProgress(1, updater)
.................
.................
'Updates Status Count in LABEL
System.Threading.Thread.Sleep(25)
updater.eventName = "UpdateStatusBar"
updater.successCount = successCount.ToString()
updater.failureCount = failureCount.ToString()
bgwWorker.ReportProgress(2, updater)
End Sub
Private Sub bgwWorker_ProgressChanged(ByVal sender As System.Object, ByVal e As ProgressChangedEventArgs) Handles bgwWorker.ProgressChanged
Dim updater As UIUpdater = TryCast(e.UserState, UIUpdater)
..........................................
If updater.eventName = "UpdateStatusBar" Then
UpdateStatusBar(updater.successCount, updater.failureCount)
ElseIf updater.eventName = "UpdateStatusBox" Then
txtUpdates.Text = txtUpdates.Text & updater.errorMessageToLog
End If
.....................................
End Sub
あなたは絶対にスポットにいました。私はこのコードを使って問題を理解し、このような美しい方法で私を説明してくれてありがとう!君に乾杯!!! :) –