title: ObjectDisposedException was unhandled: Safe handle has been closed at program end
body: <p>I have a .NET 4 C# console application. It pulls data from our IBM i and sends it to our internet SQL Server. It works perfect until it ends, I get the following error:</p>
  
  <blockquote>
    <p>System.ObjectDisposedException was unhandled   Message=Safe handle has
    been closed   Source=mscorlib   ObjectName=""   StackTrace:
           at System.Runtime.InteropServices.SafeHandle.DangerousRelease()
           at System.Threading.RegisteredWaitHandleSafe.Finalize()   InnerException:</p>
  </blockquote>
  
  <p>My program code is:</p>
  
  <pre><code>class Program
  {
      static void Main(string[] args)
      {
          System.Console.WriteLine("Begin: " + DateTime.Now.ToString());
          SystemCodeController sc = new SystemCodeController();
          sc.SyncSystemCodes();
          ParkingTicketController pt = new ParkingTicketController();
          pt.SyncParkingTickets();
          EmailHelper.SendSuccessEmail();
          System.Console.WriteLine("End: " + DateTime.Now.ToString());
      }
  }
  </code></pre>
  
  <p>In the console, I see the begin time and the end time. So I know the final line does get executed. What am I forgetting or not doing that I should be?</p>
  
  <p><strong>Update</strong>: The Sync* methods pull data from the IBM into an object then uses entity framework to insert the records into the database.</p>
  
  <pre><code>public void SyncParkingTickets()
  {
      ptr.ClearTable();
      ptr.InsertNewCitation(ibmI.GetAllCitations());
      ptr.SaveChanges();
  }
  
  public void InsertNewCitation(IEnumerable&lt;ParkingTicket&gt; citations)
  {
      foreach (ParkingTicket citation in citations)
      {
          InsertNewCitation(citation);
      }
  }
  
  public void InsertNewCitation(ParkingTicket citation)
  {
      db.AddToParkingTickets(citation);
  }
  
  public IEnumerable&lt;ParkingTicket&gt; GetAllCitations()
  {
      SystemCodeRepository scr = new SystemCodeRepository();
  
      //  Create SQL statement
  
      DataTable dt = new DataTable();
      using (iDB2Connection conn = new iDB2Connection(_connString))
      {
          using (iDB2Command cmd = new iDB2Command(sb.ToString(), conn))
          {
              conn.Open();
              using (iDB2DataAdapter da = new iDB2DataAdapter(cmd)) { da.Fill(dt); }
              conn.Close();
          }
      }
  
      #region Fill object from DataTable
      var citations = from i in dt.AsEnumerable()
                      select new ParkingTicket
                      {
                          // Fill object
                      };
      #endregion
  
      return citations;
  }
  </code></pre>
  
  <p>All of the methods operate similar to this one.</p>