2011-02-08 100 views
0

我使用的是C#COM库,它提供了一个异步机制(实际上它是PDFCreator的,通过我的客户征收)。 转换一个doc文件为PDF文件需要两两件事:排队异步操作?

  • 启动转换
  • 一个ready事件表示转换完成

[编辑]一个PrintFile方法:有不是异步模式的开始/结束方法。我必须启动打印文件的方法,并等待事件被提出

这是好的,当我只有一个文件进行转换时,但我正在努力批量转换几个文件,因为这种异步模式。

我如何管理文件队列转换?

我想我的应用程序(WPF一个)简单地“排队”转换文件....然后,我的工人对象离队文件一个接一个,确保只有一个能发生一次转换。

请注意,我用C#4,我想(因为我在学)使用的任务,如果它是一个优势。

回答

0

如果PDFCreator的暴露的APM基于接口(即BeginFoo/EndFoo方法),那么你可以用一个任务中的那些方法:

Task<int> bytesRead = Task<int>.Factory.FromAsync( 
    stream.BeginRead, stream.EndRead, buffer, 0, buffer.Length, null); 

这里有个文章:这eplains对此进行了更详细的http://blogs.msdn.com/b/pfxteam/archive/2009/06/09/9716439.aspx

一旦你有一组任务,你可以开始他们通过一个自定义的TaskScheduler或默认的排队: (http://msdn.microsoft.com/en-us/library/dd997402.aspx),它看起来好像您可以在您的方案中使用默认任务计划程序。

task.Start() 

注意:如果你想拥有这些任务通知UI,当他们完成,你可以使用一个延续,(http://msdn.microsoft.com/en-us/library/dd270696.aspx)这可以在任务完成时通知用户界面。注意马歇尔回到UI线程,你需要使用一个或的SynchronizationContext Dispatch.BeginInvoke。

+0

不幸的是,的PDFCreator OM(COM互操作)只提供了一个“设定”方法(其中包括输出文件名:(),开始方法和事件来告诉它的完成。适当的开始/结束图案是不可用(或也许我是封装它)? – 2011-02-08 14:59:27