2017-06-15 22 views
0

我試圖處理ItemAdd事件觸發時,一個新項目被添加到VB.net vsto加載項中的SentItems文件夾。當我試試這個:展望vb.net如何處理SentItems文件夾的ItemAdd事件

Private WithEvents mySentItems As Outlook.Items 
mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

我得到的第二行,我覺得,因爲我以爲我只是宣稱它超級離奇一個Declaration Expected錯誤。

如果我這樣做:

Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

的外接編譯但隨後前景變得非常生氣,甚至不會加載拋出該異常後加入:

System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> 
System.NullReferenceException: Object reference not set to an instance of an object. 

我在任何類別聲明之前,在ThisAddin類聲明後執行所有這些操作。

感謝您的任何幫助,您可能會提供。

回答

0

您可以使用下面的聲明在代碼中所有Outlook對象初始化後,看上去就像一個屬性或方法返回null(在VB.NET中爲Nothing):

Private WithEvents mySentItems As Outlook.Items = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

另一個方面是,多點是用於單行代碼中。很難理解哪些屬性或方法確實會觸發異常,除非您打破鏈並在一行代碼中聲明每個屬性和方法。

此外,您不立即釋放底層的COM對象。完成使用後,使用System.Runtime.InteropServices.Marshal.ReleaseComObject釋放Outlook對象。然後在Visual Basic中將變量設置爲Nothing(C#中的空值)以釋放對該對象的引用。請閱讀Systematically Releasing Objects文章中的更多內容。

+0

我認爲我錯過的部分是「畢竟Outlook對象被初始化」,這就是爲什麼當我將語句移動到子對象時,它的工作原理。謝謝。老實說,我不太瞭解ReleaseComObject部分:我應該發佈哪個對象?如果我釋放Items集合,我還可以捕獲SentItem事件嗎? – Edgar

0

看來你不能在一個子或函數之外進行任務。我將該行

mySentItems = Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderSentMail).Items 

移動到ThisAddin_Startup子行,它按預期工作。

感謝您查看此內容,如果您確實這麼做了,說實話,我不會僅僅發佈我自己的回答,但在我終於提出問題之前,我沒有設法解決這個問題。