2013-02-12 74 views
1

您好,我正在創建一個新的Outlook.Application(使用v.14.0.0.0 Office庫)並使用C#檢索收件箱電子郵件。只有當Outlook未運行,我收到錯誤創建未設置爲對象實例的Outlook應用程序對象引用

「對象引用不設置到對象的實例」的警報(由第一線發生)

。該計劃即將開始(甚至沒有進入捕捉部分)。

try { 
    Outlook.Application outlookApplication = new Outlook.Application(); 
    Outlook.NameSpace mapiNameSpace = outlookApplication.GetNamespace("MAPI"); 
    Outlook.MAPIFolder folder = mapiNameSpace.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); 

    foreach (Object obj in folder.Items) { 
     if (obj is Outlook.MailItem) { 
      Outlook.MailItem mailItem = (Outlook.MailItem)obj; 
     } 
    } 
} catch (Exception e) { 
    Console.WriteLine("Unfortunately an error occurred"); 
    Console.WriteLine(e.Message); 
} 

有沒有解決這個煩人的警報?我可以壓制它或解決問題嗎?

該警報來自Outlook實例,我可以看到它,因爲在導航欄中Outlook實例處於打開狀態(小警報對話框)。

+0

「文件夾」對象是否有_items_?看起來你創建了一個對象,但不是初始化它。你是否一行一行地調試你的代碼? – 2013-02-12 10:03:38

+0

是文件夾中有物品,131. – Niklas 2013-02-12 10:04:49

+0

它是什麼行崩潰? – 2013-02-12 10:05:05

回答

5

您需要先嚐試並獲取對正在運行的實例的引用,並且只有在現有實例無法附加到的情況下才創建一個新的(new Outlook.Application())。

This MSDN article說得很清楚。

無恥直接從MSDN文章RIP:

Outlook.Application application = null; 

// Check whether there is an Outlook process running. 
if (Process.GetProcessesByName("OUTLOOK").Count() > 0) 
{ 

    // If so, use the GetActiveObject method to obtain the process and cast it to an Application object. 
    application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; 
} 
else 
{ 

    // If not, create a new instance of Outlook and log on to the default profile. 
    application = new Outlook.Application(); 
    Outlook.NameSpace nameSpace = application.GetNamespace("MAPI"); 
    nameSpace.Logon("", "", Missing.Value, Missing.Value); 
    nameSpace = null; 
} 
+0

這段代碼看起來不錯,但它不能解決有關警報對話框的問題。 – Niklas 2013-02-12 10:34:43

+2

這聽起來更像是你的Outlook配置有些問題。也許是一個加載項? – Snixtor 2013-02-12 10:40:22

+1

如果我正在執行此代碼兩次,則出現錯誤並跳入catch塊。 '操作不可用<從HRESULT異常:0x800401E3 >'上如Outlook線 'outlookApplication = Marshal.GetActiveObject( 「Outlook.Application」) 。應用程序;' 我必須在程序結束時退出/退出/終止應用程序嗎? – Niklas 2013-02-12 10:48:33

0

在我的情況

'對象引用不設置爲一個對象的一個​​實例'

消息被拋出Snag-it插件。所以這與核心展望無關。

我禁用了插件,我不再收到此消息。

相關問題