C# Outlook Interop. Outlook Not Shutting Down
<p>The following problem is driving me crazy.  In C#, I am trying to ensure that outlook shuts down after I run some code to grab all calendar events, yet no matter what I try, it doesn't.  Can anyone help me?</p>

<pre><code>    private void button1_Click(object sender, EventArgs e)
    {
        Microsoft.Office.Interop.Outlook.Application outlookApp = null;
        Microsoft.Office.Interop.Outlook.NameSpace mapiNamespace = null;
        Microsoft.Office.Interop.Outlook.MAPIFolder CalendarFolder = null;
        Microsoft.Office.Interop.Outlook.Items outlookCalendarItems = null;

        outlookApp = new Microsoft.Office.Interop.Outlook.Application();
        mapiNamespace = outlookApp.GetNamespace("MAPI");

        CalendarFolder = mapiNamespace.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderCalendar);
        outlookCalendarItems = CalendarFolder.Items;

        outlookCalendarItems.IncludeRecurrences = true;
        foreach (Microsoft.Office.Interop.Outlook.AppointmentItem item in outlookCalendarItems)
        {
            if (item.IsRecurring)
            {
                Microsoft.Office.Interop.Outlook.RecurrencePattern rp = item.GetRecurrencePattern();
                DateTime first = new DateTime(2008, 8, 31, item.Start.Hour, item.Start.Minute, 0);
                DateTime last = new DateTime(2008, 10, 1);
                Microsoft.Office.Interop.Outlook.AppointmentItem recur = null;

                for (DateTime cur = first; cur &lt;= last; cur = cur.AddDays(1))
                {
                    try
                    {
                        recur = rp.GetOccurrence(cur);
                        MessageBox.Show(recur.Subject + " -&gt; " + cur.ToLongDateString());
                    }
                    catch
                    {
                    }
                }
            }
            else
            {
                MessageBox.Show(item.Subject + " -&gt; " + item.Start.ToLongDateString());
                break;
            }
        }

        ((Microsoft.Office.Interop.Outlook._Application)outlookApp).Quit();
        //outlookApp.Quit();
        //(outlookApp as Microsoft.Office.Interop.Outlook._Application).Quit();

        outlookApp = null;

        System.Runtime.InteropServices.Marshal.ReleaseComObject(outlookCalendarItems);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(CalendarFolder);
        System.Runtime.InteropServices.Marshal.ReleaseComObject(mapiNamespace);
        //System.Runtime.InteropServices.Marshal.ReleaseComObject(outlookApp);

        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(outlookCalendarItems);
        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(CalendarFolder);

        System.Runtime.InteropServices.Marshal.FinalReleaseComObject(mapiNamespace);
        //System.Runtime.InteropServices.Marshal.FinalReleaseComObject(outlookApp);
        GC.Collect();
        GC.WaitForPendingFinalizers();

        mapiNamespace = null;
        CalendarFolder = null;
        outlookCalendarItems = null;

}
</code></pre>
