没有 EventHandler 的 .net ByRef 参数委托子过程

.net ByRef parameter delegate sub procedure without EventHandler

我想制作一个 class 用于动画。 我的问题出现异常:“'ByRef' 参数 'value' 不能用于 lambda 表达式。”

我不知道如何解决我的问题。一想,我class重写了没有EventHandler的TestValue

这是我的代码:

Public Class Form1
    Dim TestValue As Single = 0
    Dim TestAnim As Animating
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
        TestAnim = New Animating(100, TestValue, 1, AddressOf Me.Invalidate)
    End Sub
    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click
        TestAnim.start()
    End Sub
    Private Sub Form1_Invalidated(sender As Object, e As InvalidateEventArgs) Handles Me.Invalidated
        Debug.WriteLine(TestValue)
    End Sub
End Class
Public Class Animating
    Dim _to, _value, _stepping As Single

    Public Delegate Sub Proc()
    Dim procedure As Proc

    Public Delegate Sub Resulting(ByRef V2 As Single)
    Dim procedures As Resulting

    Sub New(ByVal Vto As Single, ByRef value As Single, ByVal stepping As Single, ByRef obj As Proc)
        _to = Vto
        _value = value
        _stepping = stepping
        procedure = obj
        procedures = New Resulting(Sub()
                                       calc(value)
                                   End Sub)
    End Sub
    Sub start()
        Threading.ThreadPool.QueueUserWorkItem(New Threading.WaitCallback(Sub()
                                                                              calc(_value)
                                                                          End Sub))
    End Sub
    Sub calc(ByRef value As Single)
        Threading.Thread.Sleep(50)
        value += _stepping
        procedures(value)
        procedure.Invoke
        If value >= _to Then Exit Sub
        calc(value)
    End Sub

End Class

感谢您的帮助。 我使用 VB 2015 和 .NET 2.0。

Lambda表达式错误,try this link。它可能对你有帮助

EDIT 错误在于您使用 ByRef 变量 直接 作为对函数 calc() 的引用

尝试先在另一个变量中赋值,然后再赋值给函数,比如

Dim temp as Single = value
procedures = New Resulting(Sub()
                               calc(temp)
                           End Sub)

如果你把问题弄清楚就好了