在 VB.NET 异步中使用 TASK class
Using TASK class in VB.NET async
这是我第一次post来这里,所以我希望能非常明确地说明我的问题。
目前我正在使用数据库,在某些时候,由于数据量大,我遇到了一些延迟问题。
我想要的是,当我在 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 中的组合框返回为空!
我错过了什么??...我认为可能是因为您不能在 mainForm 中使用任务(例如),并尝试 "modify" 第二种形式的一些数据。 ..但我不确定...
==我正在使用 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
这是我第一次post来这里,所以我希望能非常明确地说明我的问题。
目前我正在使用数据库,在某些时候,由于数据量大,我遇到了一些延迟问题。
我想要的是,当我在 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 中的组合框返回为空!
我错过了什么??...我认为可能是因为您不能在 mainForm 中使用任务(例如),并尝试 "modify" 第二种形式的一些数据。 ..但我不确定...
==我正在使用 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