System.Runtime.InteropServices.COMException ..Your server administrator has limited the number of items you can open simultaneously...

at Microsoft.Office.Interop.Outlook._AppointmentItem.get_UserProperties()

        var calendar = outlookApplication.GetNamespace("MAPI").GetDefaultFolder(OlDefaultFolders.olFolderCalendar);

        if (calendar == null || calendar.Items == null)
        {
            return null;
        }

        var calendarItems = calendar.Items;

        if (calendarItems != null && calendarItems.Count > 0)
        {
            // Dont convert to LINQ or foreach please -> may cause Outlook memory leaks. 
            for (int counter = 1; counter <= calendarItems.Count; counter++)
            {
                var appointment = calendarItems[counter] as AppointmentItem;

                if (appointment != null)
                {
                    var userProperty = appointment.UserProperties.Find("myInformation");

                    if (userProperty != null && userProperty.Value == myValue)
                    {
                        return appointment ;
                    }
                }
            }
        }

Maybe its appointment.UserProperties.Find("myInformation") cause COMException?

有帮助吗?

解决方案 3

I have found the solution for this. It isnt necessary to use Find cause Restrict make what I need.

...
string filter = string.Format("[myInformation] = '{0}'", myInformation);
var calendarItems = calendar.Items.Restrict(filter);
...

其他提示

When done with an Outlook Mailitem close it then release it

For Each item As Outlook.MailItem In oFolder.Items
  '<process item code>

  'Close the item
    'SaveMode Values
    'olDiscard  = 1
    'olPromptForSave = 2
    'olSave = 0
  item.Close(1)

  'Release item
  Marshal.ReleaseComObject(item)
Next

You need to make sure you release Outlook items as soon as you are done with them using Marshal.ReleaseComObject() instead of waiting for the Garbage Collector to kick in.

You also need to avoid multiple dot notation to make sure you do not get implicit variables (created by the compiler) that hold that intermediary results and cannot be explicitly referenced and released.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top