使用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服务,就更应该及时地对其进行释放了。