.net PropertyChanged事件激发两次,不应
我有一个包含两个子类(子类、孙子类)的类: 当度量类I中的属性更改时,引发OnCrucibleOxidizedMassChanged事件:.net PropertyChanged事件激发两次,不应,.net,vb.net,.net,Vb.net,我有一个包含两个子类(子类、孙子类)的类: 当度量类I中的属性更改时,引发OnCrucibleOxidizedMassChanged事件: Protected Sub AddEventHandler(ByVal thisMeasurement As CalcinerDataAccess.O2Measurement) AddHandler thisMeasurement.PropertyChanged, AddressOf RaiseMassChanged End Sub Prote
Protected Sub AddEventHandler(ByVal thisMeasurement As CalcinerDataAccess.O2Measurement)
AddHandler thisMeasurement.PropertyChanged, AddressOf RaiseMassChanged
End Sub
Protected Sub RaiseMassChanged(ByVal sender As Object, ByVal e As EventArgs)
Dim CrucibleOxidizedMassReadyToReport As Boolean = _
(TypeOf e Is System.ComponentModel.PropertyChangedEventArgs) AndAlso _
(CType(e, System.ComponentModel.PropertyChangedEventArgs).PropertyName = "CrucibleOxidizedMass" And _
CType(sender, CalcinerDataAccess.O2Measurement).CrucibleOxidizedMass IsNot Nothing)
If CrucibleOxidizedMassReadyToReport Then
RaiseEvent OnCrucibleOxidizedMassChanged(sender, e)
End If
End Sub
出于测试目的,我有一个模块测试此事件引发行为。请注意,ToteBinSample继承自BaseSample。在Main()中,我只是测试更改CrossbleOxidazedMass的值时会发生什么:
Sub Main()
thisSample = New SampleTypeManager.SampleTypes.ToteBinSample
AddHandler thisSample.OnCrucibleOxidizedMassChanged, AddressOf OnChanged
thisSample.SampleData.ProcessDatas(0).O2Measurements(0).CrucibleOxidizedMass = 20
Console.WriteLine("Done...")
Console.Read()
End Sub
Private Sub OnChanged(ByVal sender As Object, ByVal e As EventArgs)
Console.WriteLine("Time to send report!")
End Sub
然而,OnChanged子会被调用两次,即使我只给crucbleoxidazedmass赋值一次
你知道为什么它会被解雇两次吗?我怎么才能纠正它?我发现了我的错误。我在LINQ to SQL类O2Measurement的onCrucibleOxidedMassChanged子类中手动引发了PropertyChanged事件。因此,我导致了PropertyChanged事件的第二次触发。谢谢你,msarchet和其他思考过这个问题的人
Partial Class O2Measurement
Private Sub OnCrucibleOxidizedMassChanged()
'Here is my mistake -- I have removed it in my code
RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs("CrucibleOxidizedMass"))
End Sub
End Class
能否显示引发初始事件的位置。msarchet:在Sub Main()中,当我将值20指定给CrossbleOxidazedMass属性时,这将在度量类中引发PropertyChanged事件。在这个类中,我将PropertyChanged事件委托给RaiseMasChanged子类,它应该在正确的条件下引发OnCrucibleOxidizedMassChanged。正是这个事件导致调用模块中的OnChanged子模块(并且只打印一次“发送报告的时间”)。希望这能澄清我的问题。谢谢
Partial Class O2Measurement
Private Sub OnCrucibleOxidizedMassChanged()
'Here is my mistake -- I have removed it in my code
RaiseEvent PropertyChanged(Me, New ComponentModel.PropertyChangedEventArgs("CrucibleOxidizedMass"))
End Sub
End Class