首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >排队异步操作?

排队异步操作?
EN

Stack Overflow用户
提问于 2011-02-08 13:46:01
回答 1查看 290关注 0票数 0

我使用的是一个提供异步机制的c# COM库(实际上是由我的客户强加的PDFCreator )。将文档文件转换为PDF文件需要两件事:

  • 是一个PrintFile方法,它启动转换
  • a ready事件,以指示转换已完成

编辑:不存在异步模式的开始/结束方法。我必须启动printfile方法,并等待引发事件。

当我只有一个文件要转换时,这是可以接受的,但是由于这种异步模式,我很难实现几个文件的批处理转换。

如何管理要转换的文件队列?

我希望我的应用程序( WPF 1)只是“排队”一个文件来转换.然后,我的worker对象逐个排列文件,确保一次只能发生一次转换。

请注意,我使用的是C# 4,如果有优势的话,我希望(因为我正在学习)使用任务。

EN

回答 1

Stack Overflow用户

发布于 2011-02-08 14:44:04

如果PDFCreator公开了一个基于APM的接口(即BeginFoo / EndFoo方法),那么您可以将这些方法包装在一个任务中:

代码语言:javascript
复制
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)启动它们的队列,看起来您可以在场景中使用默认的任务调度程序。

代码语言:javascript
复制
task.Start()

注意:如果您想让这些任务在它们完成时通知UI,您可以使用一个延续(http://msdn.microsoft.com/en-us/library/dd270696.aspx),它可以在任务完成时通知UI。注意,要回UI线程,您需要使用一个SynchronizationContext或Dispatch.BeginInvoke。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4933808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档