Here is an example…
This property calls the OnPropertyChanged event every time the property is set.
Private _salesOrderItemView As DataView = Nothing
Public Property SalesOrderItemView As DataView
Get
Return _salesOrderItemView
End Get
Set(ByVal value As DataView)
_salesOrderItemView = value
OnPropertyChanged("SalesOrderItemView")
End Set
End Property
And if you populate the property
SalesOrderItemView = dsTemp.Tables(0).DefaultView
Then add a column
SalesOrderItemView.Table.Columns.Add("NewColumn")
And do a For Each loop
For Each row As DataRow In SalesOrderItemView.Table.Rows
‘’Do something
Next
If it is quick enough, you will get a nasty exception.
Why? I am not really sure, but I think it has to do with adding a row and be in the iteration of the For Each loop. It seems to me that if you are adding the row, which will call the OnPropertyChanged event and update the view in the main thread, it will continue to execute the background thread. If it is fast enough to get into the For Each loop while the view is being updated, it will take away the object reference to the view.
Though, if I put a couple of lines of code between the adding a column statement and the For Each loop, the view will have enough time to get updated and no exception will be thrown.
Commenting out the OnPropertyChanged event will also avoid an exception being thrown.
Any comments on this?
No comments:
Post a Comment