代码之家  ›  专栏  ›  技术社区  ›  Shawn

在vb.net中使用线程的进度“bar”

  •  3
  • Shawn  · 技术社区  · 15 年前

    我目前有一个程序可以运行几个“密集”的查询。我添加了一个文本框,并显示了查询开始时的状态更新、输入和剩余的状态更新。这可以满足我的需要,但在所有查询完成之前,文本框不会实际显示任何内容。然后一次显示所有更新。我假设在另一个线程中更新文本框可以解决这个问题,这就是我丢失的地方。如何使用从运行查询的主窗体接收消息并将其显示在文本框中的线程?

    4 回复  |  直到 15 年前
        1
  •  8
  •   Mehrdad Afshari    15 年前

    这个 BackgroundWorker component 适合您的需要(示例代码在msdn链接中)。你处理它 DoWork 事件并在其中执行实际查询。您通过调用 ReportProgress 方法。要显示报告的进度,应处理 ProgressChanged 事件并更新用户界面。你先打电话给 RunWorkerAsync 后台工作人员的方法。使用 背景工作者 解除手动启动和停止线程以及与UI线程通信以更新进度条的操作。

        2
  •  3
  •   MarkJ    15 年前

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

        3
  •  1
  •   Alex LE    15 年前

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

    开始:

    worker.RunAsync()
    

    报告进度:

    worker.ReportProgress(10) 'for 10%
    
        4
  •  1
  •   Justin R.    15 年前

    除了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