Vb.net 声明要用作lambdas强制转换异常的委托
使用lambda表达式是否会导致内存泄漏 我试图在子对象中声明一个委托,并将其用作“仅一次”事件处理程序,然后在触发后将其设置为nothing。像这样的事情:Vb.net 声明要用作lambdas强制转换异常的委托,vb.net,delegates,Vb.net,Delegates,使用lambda表达式是否会导致内存泄漏 我试图在子对象中声明一个委托,并将其用作“仅一次”事件处理程序,然后在触发后将其设置为nothing。像这样的事情: Private Sub MySub() Dim o As SomeObject Dim d as System.Delegate = Sub() 'Do some stuff d = Nothing End Sub
Private Sub MySub()
Dim o As SomeObject
Dim d as System.Delegate = Sub()
'Do some stuff
d = Nothing
End Sub
AddHandler o.SomeEvent, d
End Sub
但是我在addhandler上得到一个无效的强制转换异常。但是这样的事情可能/需要吗
sry for no code hilite i on stack mobile以下示例是一个windows窗体;表单包含一个按钮,其单击事件连接到子例程:Button1\u Click 单击该按钮将创建SomeClass(o),添加事件处理程序并开始工作。StartWork将调用创建线程的匿名方法,使用另一个匿名方法模拟工作,然后释放(o)引用
Public Class Form1
Private Class SomeClass
Public Event DoWork()
Sub StartWork()
RaiseEvent DoWork()
End Sub
End Class
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
Debug.WriteLine("Button1_Click Started.")
' create class
Dim o As New SomeClass()
' add handlers
AddHandler o.DoWork, Sub()
Debug.WriteLine("o.DoWork Event Handler Started.")
' threading
Dim t As New Threading.Thread(Sub()
Debug.WriteLine("Worker Thread Started.")
' simulate work (5 seconds)
Threading.Thread.Sleep(5000)
' release reference
o = Nothing
Debug.WriteLine("Worker Thread Stopped.")
End Sub)
t.Start()
Debug.WriteLine("o.DoWork Event Handler Stopped.")
End Sub
' start the work
o.StartWork()
Debug.WriteLine("Button1_Click Stopped.")
End Sub
End Class
六羟甲基三聚氰胺六甲醚。。。在我等待别人回答的时候,我也有同样的想法。但是接下来考虑是否只使用内置的EventHandler/RoutedEventHandler类就可以做同样的事情。有点像o=neweventhandler(SomeLambdaFunction),然后在SomeLambdaFunction函数中设置o=Nothing。这是否也会释放GC的对象和lambda?