<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Unwiring events in an Add-in in preparation for shutting down ArcMap in ArcObjects SDK Questions</title>
    <link>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495095#M13319</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've created an ArcMap Add-in that responds to the AfterDraw event from the active view. When shutting down ArcMap, I was receiving an &lt;STRONG&gt;InvalidComObjectException&lt;/STRONG&gt; from&lt;STRONG&gt; ESRI.ArcGIS.Carto.IActiveViewEvents_EventProvider.Finalize()&lt;/STRONG&gt;. My guess was that, while I was wiring events to delegates in my code, I wasn't unwiring them prior to shutdown. So, I wrote the following code that seems to work correctly (at least, no more exceptions are thrown on shutdown):&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;public class MyCommand : ESRI.ArcGIS.Desktop.AddIns.Button 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MyCommand()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.ActiveViewChanged += Events_ActiveViewChanged;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.BeforeCloseDocument += Events_BeforeCloseDocument;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Events_ActiveViewChanged()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wire events on the current active view
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IActiveViewEvents_Event activeViewEvents = (IActiveViewEvents_Event)ArcMap.Document.FocusMap;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwire the current handler
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeViewEvents.AfterDraw -= new IActiveViewEvents_AfterDrawEventHandler(OnActiveViewEventsAfterDraw)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wire the handler to the current active view's event
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeViewEvents.AfterDraw += new IActiveViewEvents_AfterDrawEventHandler(OnActiveViewEventsAfterDraw)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool Events_BeforeCloseDocument
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwire event handlers from the document being closed
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IActiveViewEvents_Event activeViewEvents = (IActiveViewEvents_Event)ArcMap.Document.FocusMap;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeViewEvents.AfterDraw -= new IActiveViewEvents_AfterDrawEventHandler(OnActiveViewEventsAfterDraw)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void OnActiveViewEventsAfterDraw(IDisplay display, esriViewDrawPhase drawPhase)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // code here in response to the AfterDraw event
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private override void Dispose(bool disposing)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwire add-in events
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.ActiveViewChanged -= Events_ActiveViewChanged;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.BeforeCloseDocument -= Events_BeforeCloseDocument;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.Dispose(disposing);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 }&lt;/PRE&gt;&lt;/PRE&gt;&lt;DIV style="display: none;"&gt; &lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&lt;/P&gt;&lt;P&gt;This seems to work, but it doesn't seem very robust, and I'm not sure that it's event correct.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;P&gt;Does anyone have any experience in doing this who could offer some advice?&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;P&gt;Jon.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Sat, 11 Dec 2021 21:46:58 GMT</pubDate>
    <dc:creator>JonathanBailey</dc:creator>
    <dc:date>2021-12-11T21:46:58Z</dc:date>
    <item>
      <title>Unwiring events in an Add-in in preparation for shutting down ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495095#M13319</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I've created an ArcMap Add-in that responds to the AfterDraw event from the active view. When shutting down ArcMap, I was receiving an &lt;STRONG&gt;InvalidComObjectException&lt;/STRONG&gt; from&lt;STRONG&gt; ESRI.ArcGIS.Carto.IActiveViewEvents_EventProvider.Finalize()&lt;/STRONG&gt;. My guess was that, while I was wiring events to delegates in my code, I wasn't unwiring them prior to shutdown. So, I wrote the following code that seems to work correctly (at least, no more exceptions are thrown on shutdown):&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;&lt;PRE class="lia-code-sample line-numbers language-none"&gt;public class MyCommand : ESRI.ArcGIS.Desktop.AddIns.Button 
{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public MyCommand()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.ActiveViewChanged += Events_ActiveViewChanged;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.BeforeCloseDocument += Events_BeforeCloseDocument;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void Events_ActiveViewChanged()
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wire events on the current active view
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IActiveViewEvents_Event activeViewEvents = (IActiveViewEvents_Event)ArcMap.Document.FocusMap;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwire the current handler
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeViewEvents.AfterDraw -= new IActiveViewEvents_AfterDrawEventHandler(OnActiveViewEventsAfterDraw)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // wire the handler to the current active view's event
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeViewEvents.AfterDraw += new IActiveViewEvents_AfterDrawEventHandler(OnActiveViewEventsAfterDraw)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private bool Events_BeforeCloseDocument
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwire event handlers from the document being closed
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; IActiveViewEvents_Event activeViewEvents = (IActiveViewEvents_Event)ArcMap.Document.FocusMap;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; activeViewEvents.AfterDraw -= new IActiveViewEvents_AfterDrawEventHandler(OnActiveViewEventsAfterDraw)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return false;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private void OnActiveViewEventsAfterDraw(IDisplay display, esriViewDrawPhase drawPhase)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // code here in response to the AfterDraw event
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }

&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; private override void Dispose(bool disposing)
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; {
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // unwire add-in events
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.ActiveViewChanged -= Events_ActiveViewChanged;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; ArcMap.Events.BeforeCloseDocument -= Events_BeforeCloseDocument;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; base.Dispose(disposing);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }
 }&lt;/PRE&gt;&lt;/PRE&gt;&lt;DIV style="display: none;"&gt; &lt;/DIV&gt;&lt;P style="min-height: 8pt; padding: 0px; padding-left: 30px;"&gt;&lt;/P&gt;&lt;P&gt;This seems to work, but it doesn't seem very robust, and I'm not sure that it's event correct.&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;P&gt;Does anyone have any experience in doing this who could offer some advice?&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;P&gt;Thanks,&lt;/P&gt;&lt;P style="min-height: 8pt; padding: 0px;"&gt;&lt;/P&gt;&lt;P&gt;Jon.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 11 Dec 2021 21:46:58 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495095#M13319</guid>
      <dc:creator>JonathanBailey</dc:creator>
      <dc:date>2021-12-11T21:46:58Z</dc:date>
    </item>
    <item>
      <title>Re: Unwiring events in an Add-in in preparation for shutting down ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495096#M13320</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Can you reformat your code, it is very difficult for others to read when its all on one line.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 May 2015 16:44:52 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495096#M13320</guid>
      <dc:creator>DuncanHornby</dc:creator>
      <dc:date>2015-05-29T16:44:52Z</dc:date>
    </item>
    <item>
      <title>Re: Unwiring events in an Add-in in preparation for shutting down ArcMap</title>
      <link>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495097#M13321</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Done.&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Fri, 29 May 2015 19:36:09 GMT</pubDate>
      <guid>https://community.esri.com/t5/arcobjects-sdk-questions/unwiring-events-in-an-add-in-in-preparation-for/m-p/495097#M13321</guid>
      <dc:creator>JonathanBailey</dc:creator>
      <dc:date>2015-05-29T19:36:09Z</dc:date>
    </item>
  </channel>
</rss>

