我目前有一个运行多个“强烈”查询的程序。我添加了一个文本框,当查询开始、结束以及剩余数量时呈现状态更新。这满足了我的需求,但是文本框直到所有查询都完成后才显示任何内容。我认为在另一个线程中更新文本框可以解决这个问题,但我不知道该怎么做。如何使用一个接收主表单运行查询消息并将其显示在文本框中的线程?
我目前有一个运行多个“强烈”查询的程序。我添加了一个文本框,当查询开始、结束以及剩余数量时呈现状态更新。这满足了我的需求,但是文本框直到所有查询都完成后才显示任何内容。我认为在另一个线程中更新文本框可以解决这个问题,但我不知道该怎么做。如何使用一个接收主表单运行查询消息并将其显示在文本框中的线程?
BackgroundWorker
组件适合您的需求(MSDN链接中有示例代码)。您需要处理它的DoWork
事件并在其中执行实际查询。通过调用其ReportProgress
方法来报告进度。要显示报告的进度,您应该处理其ProgressChanged
事件并更新UI。通过调用后台工作程序的RunWorkerAsync
方法来开始任务。使用BackgroundWorker
可以使您免于手动启动和停止线程以及与UI线程通信以更新进度条。
最简单的方法是利用BackgroundWorker,处理它的DoWork事件,并使用ProgressChanged事件向ProgressBar报告进度。
开始:
worker.RunAsync()
报告进度:
worker.ReportProgress(10) 'for 10%
在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