【问题标题】:Using TASK class in VB.NET async在 VB.NET 异步中使用 TASK 类
【发布时间】:2017-08-02 06:11:09
【问题描述】:

这是我在这里的第一篇文章,所以我希望能非常明确地说明我的问题。

目前我正在使用数据库,并且在某些时候,由于数据量很大,我遇到了一些延迟问题。

我想要的是,当我按下 MainForm 中的一个按钮来调用单独的 Task 时,该 Task 采用一种方法来填充另一个表单中的组合框,然后显示该表单。

代码如下:

Private Sub PopulateCmb()
    For Each value As Integer In servRefrence.PopulateID_Masini
        Form_Insert.ComboBox1.Items.Add(value)
    Next
    <<This is taking 3-4 seconds>>
End Sub

Private Async Sub BtnInsert_Click(sender As Object, e As EventArgs) Handles BtnInsert.Click

    Dim task As Task = New Task(New Action(AddressOf PopulateCmb))
    task.Start()
    LblInfo.Text = "Please Wait"
    Await task

    LblInfo.Text = "Idle"
    Form_Insert.Show()

End Sub

此方法:servRefrence.PopulateID_Masini 正在返回来自网络服务器的整数列表...

这段代码的问题是,当任务完成时,Form_Insert 中的组合框变空了!

我错过了什么??...我认为可能是因为您无法使用 mainForm 中的任务(例如),并尝试以第二种形式“修改”某些数据...但是我不确定……

==我正在使用 Visual Studio 2012== 模板:Visual Basic

请帮忙!

谢谢!!!

【问题讨论】:

标签: .net vb.net visual-studio-2012 async-await


【解决方案1】:

问题是您在非 UI 线程中填充组合框。我猜延迟是由服务调用引起的,所以你应该在 UI 线程中等待任务之后填充组合框。

Dim task = Task.Factory.StartNew(Of List(Of Integer))(
           Function() As List(Of Integer)
                 Return servRefrence.PopulateID_Masini
           End Function)

Dim result = Await task

For Each value As Integer In result
    Form_Insert.ComboBox1.Items.Add(value)
Next

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2017-04-21
  • 1970-01-01
  • 2014-10-08
  • 2013-09-13
  • 1970-01-01
  • 1970-01-01
  • 2021-05-11
  • 2022-11-30
相关资源
最近更新 更多