转发 vb.net 使用 lamdar表达式 IProgress 不报告,注意 function 与 sub 的语法

转发 网址:https://qa.1r1g.com/sf/ask/3476729581/

IProgress 不报告  vb.net async-await progress-bar 

我有以下代码来报告进度。该函数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
 --------------------------------------------------------------------------------------------
Han*_*ant  6 
   Dim prog = New Progress(Of Integer)(Function(x) ProgressBar1.Value = x)

编译器很难理解这段代码。请注意,lambda 表达式是一个函数,函数需要有返回值。它从何而来?lambda 表达式的返回值类型是什么?

希望你能看到陷阱。它唯一能做的就是假设您打算返回一个布尔值。因此,您可以比较 Value 和 x 的值。换句话说,它被编译为Return (ProgressBar1.Value = x). 一个布尔值,返回值实际上并没有被使用。

不是作业,因此没有进度条更新。正确编写以修复错误:

   Dim prog = New Progress(Of Integer)(Sub(x) ProgressBar1.Value = x) 
 
posted on 2024-01-15 23:44  boy8199  阅读(10)  评论(0编辑  收藏  举报