none
Outlook对象模型之二 RRS feed

  • 常规讨论

  • 使用OutlookSession

    通过使用POOM,开发者可以访问Pocket Outlook中所有的服务。在访问Pocket Outlook服务时,总是从创建OutlookSession类型的对象开始的,一旦创建了OutlookSession类型的对象,就可以从这个对象中获得各种帐户和各种文件夹对象,从而完成具体的操作。

           通常将OutlookSession对象作为一个类型的私有域,在类型的构造器中创建,并在类型的Dispose方法或析构器中释放。

           创建OutlookSession对象的方法非常简单,OutlookSession类提供了唯一的一个默认构造器,因此直接使用new运算符创建即可。下面的代码片段显示了在移动设备客户端应用程序中,如何将OutlookSession对象作为窗体的私有域并在构造器中进行创建。

    using ...

     

    using Microsoft.WindowsMobile.PocketOutlook;

     

    public partial class MainForm : Form

    {

        OutlookSession m_outlookSession;

     

        public MainForm()

        {

           InitializeComponent();

     

           m_outlookSession = new OutlookSession();

        }

        ...

    }

    后续几篇文章都是围绕着使用OutlookSession对象展开的,都使用了和上面几乎完全相同的代码片段。

           这里需要注意,由于OutlookSession位于Microsoft.WindowsMobile.PocketOutlook命名空间中,因此使用using指令引入了这个命名空间。此外,还要为项目添加对Microsoft.WindowsMobile.PocketOutlook.dll程序集的引用。

           注意,POOM本身是对非托管Pocket Outlook类型库的一个封装,因此OutlookSession类在底层使用了非托管的Pocket Outlook资源,同时实现了IDisposable模式,所以在使用完OutlookSession对象后,应该调用它的Dispose方法进行释放。释放的位置在这里应该选择在主窗体的Dispose方法中。

           C# 2.0语言提出了部分类型(Partial Types)的概念,一个类的代码可以分别放在两个或更多个源代码文件中;Visual Studio 2005充分利用了这一概念,将窗体类的代码分别放在了两个代码文件中。以MainForm为例,一个源代码文件是MainForm.cs,其中放置了窗体的构造器和用户添加的事件处理方法;另外一个源文件是MainForm.Designer.cs,其中放置了控件的定义和有窗体设计器自动生成的代码(通过在Solution Explorer窗口中点击窗体类左侧的加号,展开窗体类,可以找到这个文件)。

           这样做的好处是开发者可以方便地找到自己编写的代码,而不会迷失在窗体设计器生成的大量模式化的代码中。然而美中不足的是,Visual Studio 2005将窗体的构造器放在了*.cs文件中,而将Dispose方法放在了*.Designer.cs中,这就导致了用户对象的创建和释放不能在同一个文件中进行。希望在下一个版本的Visual Studio中能够将这两个方法统一放在一起。

           打开,MainForm.Designer.cs文件,在窗体的Dispose方法一开始加入对OutlookSession的释放代码即可。

    protected override void Dispose(bool disposing)

    {

        if (disposing && (components != null))

        {

           m_outlookSession.Dispose();

     

           components.Dispose();

        }

        base.Dispose(disposing);

    }

           尽管主窗体的关闭意味着应用程序的结束,OutlookSession对象会被自动释放,但作为一种良好的编程习惯,应该对其进行释放。而且,当OutlookSession对象的生存期并不恰好和应用程序的生存期一样时,例如在一个对话框或临时窗口中使用Pocket Outlook服务,就更应该及时地对其进行释放了。

    2009年6月26日 5:56

全部回复

  • lz,如果没有什么问题的话,建议不要发这种帖子。
    因为MS的政策是帖子需要消灭0回复...

    最近有了小宝宝,他比较淘气,所以来这里的时间少了挺多。非常抱歉。
    2009年6月29日 2:24
    版主