没有 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)
如果你把问题弄清楚就好了
我想制作一个 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)
如果你把问题弄清楚就好了