4

System.Runtime.InteropServices.COMException ..サーバー管理者は、同時に開くことができるアイテムの数を制限しています...

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 ;
                    }
                }
            }
        }

多分その任命.UserProperties.Find("myInformation")はCOMExceptionを引き起こしますか?

4

3 に答える 3

3

Marshal.ReleaseComObject()ガベージ コレクターが起動するのを待つのではなく、Outlook アイテムの使用が完了したらすぐに解放する必要があります。

また、中間結果を保持し、明示的に参照および解放できない暗黙的な変数 (コンパイラによって作成された) を取得しないように、複数のドット表記を避ける必要があります。

于 2013-04-02T14:07:04.033 に答える
1

これに対する解決策を見つけました。Find私が必要とするものを作る原因を使用する必要はありませんRestrict

...
string filter = string.Format("[myInformation] = '{0}'", myInformation);
var calendarItems = calendar.Items.Restrict(filter);
...
于 2013-04-02T07:22:34.423 に答える