我正在使用提供异步机制的c#COM库(实际上它是由我的客户强加的PDFCreator)。 将doc文件转换为PDF文件需要两件事:
PrintFile
方法ready
事件表示转换已完成[编辑]:没有异步模式的Begin / End方法。我必须启动printfile方法,并等待事件被引发
当我只有一个要转换的文件时,这没关系,但由于这种异步模式,我正在努力批量转换多个文件。
如何管理要转换的文件队列?
我希望我的应用程序(一个WPF)简单地“排队”要转换的文件....然后我的工作对象逐个出列文件,确保一次只能进行一次转换。
请注意我正在使用C#4,我希望(因为我正在学习)使用任务,如果这是一个优势。
答案 0 :(得分:0)
如果PDFCreator公开了基于APM的接口(即BeginFoo / EndFoo方法),那么您可以将这些方法包装在任务中:
Task<int> bytesRead = Task<int>.Factory.FromAsync(
stream.BeginRead, stream.EndRead, buffer, 0, buffer.Length, null);
这里有一篇文章:http://blogs.msdn.com/b/pfxteam/archive/2009/06/09/9716439.aspx更详细地解释了这一点。
一旦你有了一组任务,你就可以开始通过自定义TaskScheduler或默认任务来排队它们: (http://msdn.microsoft.com/en-us/library/dd997402.aspx),看起来好像可以在场景中使用默认任务调度程序。
task.Start()
注意:如果您希望这些任务在完成后通知用户界面,您可以使用延续(http://msdn.microsoft.com/en-us/library/dd270696.aspx),该通知可以通知任务完成后的UI。请注意,要回到UI线程,您需要使用SynchronizationContext或Dispatch.BeginInvoke。