我目前有一个运行几个“激烈”查询的程序。我添加了一个文本框,并在查询开始时显示状态更新,结果以及剩余的数量。这可以满足我的需要,但是在完成所有查询之前,文本框实际上不会显示任何内容。然后它立即显示所有更新。我假设在另一个线程中更新文本框会解决这个问题,这就是我迷失的地方。如何使用从运行查询的主窗体接收消息并将其显示在文本框中的线程?
答案 0 :(得分:8)
BackgroundWorker
component适合您的需要(MSDN链接中有示例代码)。您处理其DoWork
事件并在其中执行实际查询。您可以通过调用ReportProgress
方法来报告进度。要显示报告的进度,您应该处理其ProgressChanged
事件并更新UI。您可以通过调用后台工作程序的RunWorkerAsync
方法来启动该作业。使用BackgroundWorker
可以避免手动启动和停止线程以及与UI线程通信以更新进度条。
答案 1 :(得分:3)
BackgroundWorker是一种用于在后台线程上进行密集工作的通用方法。但是,由于您的问题听起来像是在进行数据库操作,因此在ADO.Net中使用native support进行异步操作可能更容易。您可以使用callbacks作为进度条。
答案 2 :(得分:1)
最简单的方法是使用BackgroundWorker,处理它的DoWork事件并使用ProgressChanged事件向ProgressBar报告进度。
开始:
worker.RunAsync()
报告进度:
worker.ReportProgress(10) 'for 10%
答案 3 :(得分:1)
添加Mehrdad和Alex发布的内容,以下是如何处理ReportProgess
方法(ProgressChanged
)引发的事件以更新进度条:
Private Sub backgroundWorker_ProgressChanged ByVal sender As Object, ByVal e As ProgressChangedEventArgs) Handles backgroundWorker.ProgressChanged
Me.progressBar1.Value = e.ProgressPercentage
End Sub