每当我调用以下Structure
(,参数设置为 True
)的构造函数时,我都会得到NullReferenceException:
Imports System.Threading
Imports System.Windows.Threading
Public Structure Test
Private MyDispatcher As Dispatcher
Private MyResetEvent As ManualResetEvent
Public Sub New(ByVal newThread As Boolean)
If newThread Then
MyResetEvent = New ManualResetEvent(False)
Dim thread As New Thread(AddressOf Start)
thread.Start()
MyResetEvent .WaitOne()
' NullReferenceException below:
MyDispatcher.BeginInvoke(New Action(AddressOf DoSomething))
End If
End Sub
Private Sub Start()
MyDispatcher = Dispatcher.CurrentDispatcher
MyResetEvent.Set()
Dispatcher.Run()
End Sub
Private Sub DoSomething()
End Sub
End Structure
MyDispatcher
是Nothing
,导致NullReferenceException。但使用Class
代替Structure
可以正常工作。为什么呢?
修改:可能有哪些变通方法?
答案 0 :(得分:3)
问题是使用AddressOf
时构造的委托。使用Object
引用(例如方法)构造委托。结构必须在作为Object
传递时加框,并在调用Start
之前取消装箱。结构的第二个,未装箱的副本,Start
方法会发生变异。
您的原始代码仍在使用未装箱的原始结构,不会进行任何修改。