c# - 创建未设置为对象实例的 Outlook 应用程序对象引用

标签 c# object reference outlook instance

您好,我正在创建一个新的 Outlook.Application(带有 v.14.0.0.0 Office 库)并使用 C# 检索收件箱电子邮件。只有当 outlook 没有运行时,我才会收到错误

'Object reference not set to an instance of an object'

在警报中(第一行发生)。该程序正在运行(甚至没有进入 catch 部分)。

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 实例(小警报对话框)。

最佳答案

您需要首先尝试获取对正在运行的实例的引用,并且只有在现有实例无法附加到时才创建一个新实例 (new Outlook.Application()) .

This MSDN article说得很清楚。

直接从 MSDN 文章中无耻地抄袭:

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

关于c# - 创建未设置为对象实例的 Outlook 应用程序对象引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14829840/

相关文章:

c++ - 包含对其他对象的引用的对象的深层拷贝

c# - 终结句柄保留在内存中。如何删除此引用?

c# - 将基于 mfc 对话框的 Windows 应用程序转换为基于 Web

c# - 将未知类型的列表转换为通用列表类型

C# - 来自 Kotlin 的 with 关键字的模拟?

javascript - 从 Node.js/JavaScript 中的 URL 返回 JSON 对象

c# - 从子控件获取父面板的 "name"

java - 搜索未返回对象

c# - 多个 Pen 对象 C#

java - 什么时候使用静态属性?