.net - 在 VB.NET 异步中使用 TASK 类

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

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

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

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

这是代码:

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 中的组合框将返回空!

我缺少什么??...我认为可能是因为您无法使用主窗体中的任务(例如),并尝试以第二种形式“修改”一些数据...但是我我不确定...

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

请帮忙!

谢谢!!!

最佳答案

问题是您正在非 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

关于.net - 在 VB.NET 异步中使用 TASK 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45452737/

相关文章:

.net - 调整图像大小会在右侧和底部裁剪一个像素

c# - 简单的自定义 Web 控件

MySQL INSERT INTO 使用带有 TIMESTAMP 的 SELECT

javascript - Typescript 定义 Breeze.d.ts - 环境上下文中已经存在的代码不允许声明修饰符

c# - 将 JSON 字符串粘贴到 Visual Studio 中

javascript - 通过 Jquery 禁用 TinyMCE 文本编辑器

c# - 托管 WinRT API 是否包括计算 MD5 哈希的方法?

vb.net - 将空引用传递给重载构造函数

xml - 编写带有属性的 xmlns 元素

visual-studio - 如何在 VS NuGet 包管理器控制台中永久设置新的默认项目?