转发 网址: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)
标签:function,lamdar,vb,Function,Dim,Value,Progress,prog,Integer
From: https://www.cnblogs.com/MadeInChinese/p/17966667