我正在构建一个数据流管道来进行各种处理(主要是I/O,但也有一些CPU处理),这是一个自然发生的流程。目前的流程基本模式如下:
我看了这篇MSDN文章:http://msdn.microsoft.com/en-us/library/hh228605(v=vs.110).aspx,但它对这种行为不是很清楚。我能否从管道中触发一个可以在UI线程上运行的事件来实现这个?
编辑:管道将从UI上的BackgroundWorker对象启动,而不是直接从UI线程启动。
- 从文件加载数据
- 使用变换块解析记录
- 通过REST序列化和上传对象到服务器
我看了这篇MSDN文章:http://msdn.microsoft.com/en-us/library/hh228605(v=vs.110).aspx,但它对这种行为不是很清楚。我能否从管道中触发一个可以在UI线程上运行的事件来实现这个?
编辑:管道将从UI上的BackgroundWorker对象启动,而不是直接从UI线程启动。
DataflowBlockOptions.TaskScheduler
来使其在 UI 线程上运行?提供一段代码会更有帮助。 - noseratio - open to workDataflowBlockOptions.TaskScheduler
是我要告诉那些特定的块在 UI 线程上运行的方法。 - JNYRangerProgress<T>
模式来实现,而不是使用 UI 线程的 TaskScheduler。 - noseratio - open to workProgress<T>
从管道向 BackgroundWorker 报告,然后由 BackgroundWorker 触发 progresschanged 事件到 UI 是否是更好的选择? - JNYRangerBackgroundWorker
。只需在UI线程上创建Progress<T>
(它会捕获上下文并在内部使用sc.Post
),然后在数据流管道中的任何进展被取得的地方调用它即可。 - noseratio - open to work