2010-01-25 29 views
3

我目前有一个运行几个“激烈”查询的程序。我添加了一个文本框,并在查询开始时提供了状态更新,eding和剩余的数量。这将满足我的需要,但在所有查询完成之前,文本框并不会显示任何内容。然后它会立即显示所有更新。我假设更新另一个线程中的文本框可以解决这个问题,那就是我迷失的地方。我如何使用从主窗体运行查询接收消息并将其显示在文本框中的线程?使用vb.net中的线程进度“bar”

回答

8

BackgroundWorker component适合您的需要(示例代码在MSDN链接中有)。您处理其DoWork事件并在其中执行实际查询。您通过调用ReportProgress方法来报告进度。要显示报告的进度,您应该处理其ProgressChanged事件并更新UI。通过调用后台工作人员的RunWorkerAsync方法开始工作。使用BackgroundWorker可以免除手动启动和停止线程以及与UI线程通信以更新进度栏。

+0

哈哈,我只是想说。我似乎无法回答得太快。 – jrsconfitto 2010-01-25 21:13:37

+0

哈,我甚至没有想过在不同的线程中执行查询。我会尝试的。 – Shawn 2010-01-25 21:14:47

+0

@Jugglingnutcase - 我总是有同样的问题!有一天,我回答了一个问题,指向与其他人相同的网址,但他比我快5秒钟lol – Dave7896 2010-01-25 21:17:45

1

最简单的方法是使用BackgroundWorker,处理它的DoWork事件并使用ProgressChanged事件向progressBar报告进度。

开始:

worker.RunAsync() 

报告进展情况:

worker.ReportProgress(10) 'for 10% 
1

添加到什么迈赫达德和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 
3

BackgroundWorker是一个用于在后台线程上进行密集工作的良好通用方法。但是,由于您的问题听起来像是在进行数据库操作,因此在ADO.Net中使用native support进行异步操作可能更容易。您可以使用callbacks作为进度条。