我有以下代码来报告进度。函数CalculateMandelbrot()
似乎异步,但我的进度条没有显示任何内容。
Public Class Form1
Private Async Function Button1_Click(sender As Object, e As EventArgs) As Task Handles Button1.Click
Dim prog As Progress(Of Integer) = New Progress(Of Integer)(Function(x) ProgressBar1.Value = x)
Await Task.Run(Function() CalculateMandelbrot(prog))
Dim ende As Boolean = True
End Function
Private Function CalculateMandelbrot(ByVal progress As IProgress(Of Integer))
For xi = 0 To 100
Threading.Thread.Sleep(40)
progress.Report(xi)
Next
Return 42
End Function
End Class
答案 0 :(得分:4)
Dim prog = New Progress(Of Integer)(Function(x) ProgressBar1.Value = x)
编译器非常努力地理解这段代码。请注意,lambda表达式是一个Function,函数需要有一个返回值。它从何而来? lambda表达式的返回值类型是什么?
希望你能看到陷阱。它唯一能做的就是假设你要返回一个布尔值。因此,您可以比较Value和x的值。换句话说,它被编译为Return (ProgressBar1.Value = x)
。一个布尔值,该返回值实际上没有被使用。
不是作业,因此没有进度条更新。写得正确以修复错误:
Dim prog = New Progress(Of Integer)(Sub(x) ProgressBar1.Value = x)