繁体   English   中英

Windows Phone中的后台线程

[英]Background Threads in Windows Phone

到目前为止,在我的Windows Phone 7应用程序开发经验中,我注意到在异步线程中运行操作有不同的方法。

  1. System.Threading.Thread
  2. System.ComponentModel.BackgroundWorker
  3. System.Threading.ThreadPool.QueueUserWorkItem()

我看不出这些方法之间有任何明显的区别(除了前两个方法更具可追溯性)。

在使用任何这些方法之前,你们有什么事情要考虑吗? 你更喜欢哪一个?为什么?

问题有点回答,但答案有点细节(IMO)。

让我们轮流参加。

System.Threading.Thread

所有线程(无论如何都在CLR中)最终由此类表示。 但是,当我们想要自己创建实例时,您可能会将其包括在内。

答案很少。 通常,调度后台任务的日常工作是Threadpool 但是在某些情况下我们想要创建自己的线程。 通常,这样的线程将适用于大多数app运行时。 它的大部分时间都会在一些等待句柄上被阻止。 偶尔我们会发出这个句柄的信号,然后它就可以做一些重要的事情,但之后又会重新入睡。 我们没有使用Threadpool工作项,因为我们不支持这样的想法,即它可能排队在一大堆未完成的任务之后,其中一些任务可能本身(或许不会在某些其他等待中被阻止)。

System.ComponentModel.BackgroundWorker

这是一个ThreadPool工作项的友好类包装器。 这个类只面向面向UI的开发人员偶尔需要使用后台线程。 它在UI线程上调度的事件使其易于使用。

System.Threading.ThreadPool.QueueUserWorkItem

当你想要在后台线程上做一些工作时,这就是日常的主力。 这消除了分配和取消分配单个线程以执行某些任务的费用。 它限制了线程实例的数量,以防止太多的可用资源被太多的操作吞并,试图并行运行。

QueueUserWorkItem是我首选的调用后台操作的选项。

它可以说取决于你想要做什么,你已经列出了3种截然不同的线程模型。

  1. 基本线程
  2. 专为具有单独UI线程的应用程序而设计。
  3. 托管线程池

你读过MSDN等吗?

http://www.albahari.com/threadin

Http://msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx

你没有说“为什么”,但是

  1. 基本线程 - 非常昂贵,不适合小型工作
  2. Backgroundworker - 主要用于UI + Progressbar工作
  3. ThreadPool - 用于小型独立工作

我认为SL不支持TPL,这很可惜。

当你的UI需要随着线程的进展而更新时,后台工作者往往会更好地使用,因为它处理在UI线程而不是后台线程上调用回调函数(例如OnProgress回调)。 另外两个不做这项工作。 你应该这样做。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM