vb.net - 如何在LINQ查询期间正确实现多线程进度条?

标签 vb.net multithreading performance

好的,这是东西:

我有一个linq查询,加载大约。将1000行输入一个变量,在此过程中,我想显示一个进度条,不一定要说明百分比,可以是选取框样式,没关系。

此进度栏采用模态形式,可在查询运行时阻止用户与应用进行交互。

现在这是我的代码:

Private Sub LoadBar()
  Try
     Dim load As New frmLoadbar
     load.Text = "Loading bunch of data..."
     load.ShowDialog()
  Catch e As Threading.ThreadAbortException
     Threading.Thread.ResetAbort()
  End Try
End Sub

在另一个子目录中:
Dim myThreadDelegate As New Threading.ThreadStart(AddressOf LoadBar)
Dim th As New Threading.Thread(myThreadDelegate)
th.Name = "TimeConsuming"
th.Start()
Dim XY = db.Table.GetEnumerator
While XY.MoveNext
    Dim item As New ListViewItem
    item.Text = XY.Current.Name
    item.Tag = XY.Current
    ListBox1.Items.Add(item)
End While
Autos.Dispose()
Try
    th.Abort()
Catch ex As Exception //here's where i 'swallow the re-thrown exception
End Try

但这并不是我编写过的最丑的代码之一,但我只是不想让那个重新抛出的异常起作用。
一些解释:
  • 我希望查询完成后关闭模态表单。
  • 出于这个原因,我“中止了”运行表单的线程。
  • 由于中止线程会引发双重异常,因此我必须“吞咽”
    那个异常(exception)。

  • 现在我知道我可以像下面这样实现:
  • 将循环编码到包含进度条的表单中,该表单会检查
    定期获取 bool 值,如果为true,则形式可以
    关闭自己。
  • 从另一种形式-在工作线程上-我可以更改它
    查询完成后,将boolean值设置为true。

  • 但是我的问题来了:

    什么是实现此目标的最佳方法?
  • 我知道可以由后台工作人员完成
    为此专门发明的,但是我可以使用背景吗
    worker 作为显示进度栏的线程?
  • 如果不是(并且我必须在后台工作程序上运行查询,并且
    显示我的原始形式的模态形式),那意味着
    该查询将“在后台工作”?
  • 这是否意味着查询会更慢?

  • 我研究了其他教程,但是由于一个或另一个原因,我要么不能复制它(由于复杂),要么我不相信它比这更好。

    感谢您抽出宝贵的时间回答。

    最佳答案

    您可以显示模式形式,然后从该形式运行BackgroundWorker。进度和已完成的事件将在UI线程上,因此您可以在进度条运行时更新进度条,并在已完成的事件处理程序中关闭表单。

    关于vb.net - 如何在LINQ查询期间正确实现多线程进度条?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7955770/

    相关文章:

    sql - 使用连接在 SQL 中转换列

    database - 如何在 Visual Studio 2008 中连接到 Access 2007 (accdb) 文件

    c# - 防止应用程序关闭

    python - 如何在 Python 2.6 中获得线程安全打印?

    ios - SQLite 查询占用太多 CPU

    ruby-on-rails - Rails 应用程序中 Grape::Middleware::Formatter#call 方法的新遗物自定义检测

    c++ - 在 VB.NET 中使用 DLL 导入/声明以及 .NET 不使用的参数类型

    xml - VB.net XML 获取一组节点属性并按节点对它们进行分组?

    c# - MSR Orleans - 如何创建具有并行读取的读写器粒度

    javascript - 以 Angular 呈现表中数据的最佳方法