﻿<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>StrataFrame Forum » StrataFrame Application Framework - V1 » Issues  » ParentBusinessObjectChanged event mishandled during Disposing</title><generator>InstantForum 2017-1 Final</generator><description>StrataFrame Forum</description><link>http://forum.strataframe.net/</link><webMaster>StrataFrame Forum</webMaster><lastBuildDate>Tue, 09 Jun 2026 05:47:07 GMT</lastBuildDate><ttl>20</ttl><item><title>ParentBusinessObjectChanged event mishandled during Disposing</title><link>http://forum.strataframe.net/FindPost30862.aspx</link><description>I believe that I've found a bug in the BusinessLayer code involving the ParentBusinessObjectChanged event.&amp;nbsp; A reference to a null pointer is causing the application to throw an exception.&lt;br/&gt;&lt;br/&gt;I have a ParentBO and ChildBO, with the proper ParentRelationship set up.&amp;nbsp; The ChildBO "attaches" to the ParentBO's FieldPropertyChanged event in order to listen for changes to field values.&lt;br/&gt;&lt;br/&gt;The ChildBO has a handler for its ParentBusinessObjectChanged event as follows:&lt;br/&gt;&lt;br/&gt;&lt;span&gt;[code]&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void ChildBO_ParentBusinessObjectChanged(ParentBusinessObjectChangedEventArgs e)&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ParentBO parentBO;&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parentBO = e.PreviousParentBusinessObject as ParentBO;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (parentBO != null) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Detach from old Parent BO&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parentBO.FieldPropertyChanged -= _parentBO_FieldPropertyChanged;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br/&gt;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parentBO = e.NewParentBusinessObject as ParentBO;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (parentBO != null) {&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Attach to the new Parent BO&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; parentBO.FieldPropertyChanged += _parentBO_FieldPropertyChanged;&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;br/&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }[/code]&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;The problem occurs when the ParentBO is disposed.&amp;nbsp; The best I can tell, the sequence of events leading to the null reference exception is a follows:&lt;br/&gt;&lt;br/&gt;&lt;ol&gt;&lt;li&gt;The application's form is closed, which causes...&lt;/li&gt;&lt;li&gt;The ParentBO to be disposed, which eventually causes...&lt;/li&gt;&lt;li&gt;The BusinessLayer.Dispose procedure to be called, which calls...&lt;/li&gt;&lt;li&gt;The BusinessLayer.ForciblyRemoveAllHandlers() routine, which...&lt;/li&gt;&lt;li&gt;Sets the value BusinessLayer._Handlers_MiscEvents to null, then...&lt;/li&gt;&lt;li&gt;The BusinessLayer.Dispose procedure eventually calls the CleanUp() routine, which...&lt;/li&gt;&lt;li&gt;Sets the ChildBO's ParentBusinessObject to null, which...&lt;/li&gt;&lt;li&gt;Fires the ChildBO's ParentBusinessObjectChanged event with the e.PreviousParentBusinessObject==ParentBO, which...&lt;/li&gt;&lt;li&gt;Tries to detach from the ParentBO's FieldPropertyChanged event, which...&lt;/li&gt;&lt;li&gt;Causes a null reference exception in BusinessLayer.RemoveEventHandler route, because...&lt;/li&gt;&lt;li&gt;The ParentBO's BusinessLayer._Handler_MiscEvents was set to null in step #5&lt;/li&gt;&lt;/ol&gt;Hope this helps toward an eventual fix.</description><pubDate>Fri, 03 Feb 2012 11:17:20 GMT</pubDate><dc:creator>Kirk M Sherhart</dc:creator></item></channel></rss>