[英]Background Threads in Windows Phone
到目前为止,在我的Windows Phone 7应用程序开发经验中,我注意到在异步线程中运行操作有不同的方法。
我看不出这些方法之间有任何明显的区别(除了前两个方法更具可追溯性)。
在使用任何这些方法之前,你们有什么事情要考虑吗? 你更喜欢哪一个?为什么?
问题有点回答,但答案有点细节(IMO)。
让我们轮流参加。
System.Threading.Thread
所有线程(无论如何都在CLR中)最终由此类表示。 但是,当我们想要自己创建实例时,您可能会将其包括在内。
答案很少。 通常,调度后台任务的日常工作是Threadpool
。 但是在某些情况下我们想要创建自己的线程。 通常,这样的线程将适用于大多数app运行时。 它的大部分时间都会在一些等待句柄上被阻止。 偶尔我们会发出这个句柄的信号,然后它就可以做一些重要的事情,但之后又会重新入睡。 我们没有使用Threadpool工作项,因为我们不支持这样的想法,即它可能排队在一大堆未完成的任务之后,其中一些任务可能本身(或许不会在某些其他等待中被阻止)。
System.ComponentModel.BackgroundWorker
这是一个ThreadPool工作项的友好类包装器。 这个类只面向面向UI的开发人员偶尔需要使用后台线程。 它在UI线程上调度的事件使其易于使用。
System.Threading.ThreadPool.QueueUserWorkItem
当你想要在后台线程上做一些工作时,这就是日常的主力。 这消除了分配和取消分配单个线程以执行某些任务的费用。 它限制了线程实例的数量,以防止太多的可用资源被太多的操作吞并,试图并行运行。
QueueUserWorkItem
是我首选的调用后台操作的选项。
它可以说取决于你想要做什么,你已经列出了3种截然不同的线程模型。
你读过MSDN等吗?
http://www.albahari.com/threadin
Http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
你没有说“为什么”,但是
我认为SL不支持TPL,这很可惜。
当你的UI需要随着线程的进展而更新时,后台工作者往往会更好地使用,因为它处理在UI线程而不是后台线程上调用回调函数(例如OnProgress回调)。 另外两个不做这项工作。 你应该这样做。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.