我目前有一个运行几个“激烈”查询的程序。我添加了一个文本框并在查询开始时显示状态更新,编辑和剩余多少。这将满足我的需要,但在所有查询完成之前,文本框实际上不会显示任何内容。然后它会立即显示所有更新。我假设在另一个线程中更新文本框可以解决这个问题,这就是我迷路的地方。如何使用从运行查询的主窗体接收消息并将其显示在文本框中的线程?
问问题
12618 次
4 回答
8
该BackgroundWorker
组件适合您的需要(示例代码位于 MSDN 链接中)。您处理它的DoWork
事件并在其中执行实际查询。您通过调用其ReportProgress
方法来报告进度。要显示报告的进度,您应该处理其ProgressChanged
事件并更新 UI。您通过调用RunWorkerAsync
后台工作人员的方法来启动作业。使用BackgroundWorker
使您免于手动启动和停止线程以及与 UI 线程通信以更新进度条。
于 2010-01-25T21:12:39.450 回答
3
BackgroundWorker 是一种很好的通用方法,用于在后台线程上进行密集工作。但是,由于您的问题听起来像是在进行数据库操作,因此在 ADO.Net 中使用对异步操作的本机支持可能会更容易。您可以对进度条使用回调。
于 2010-01-26T10:26:26.520 回答
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
于 2010-01-25T21:18:20.103 回答
1
最简单的方法是使用 BackgroundWorker,处理它的 DoWork 事件并使用 ProgressChanged 事件向 ProgressBar 报告进度。
开始:
worker.RunAsync()
报告进度:
worker.ReportProgress(10) 'for 10%
于 2010-01-25T21:14:58.520 回答