Windows Phone中的后台线程

Mo *_*our 11 c# silverlight windows-phone-7

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

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

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

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

Ant*_*nes 15

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

让我们轮流参加.

System.Threading.Thread

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

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

System.ComponentModel.BackgroundWorker

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

System.Threading.ThreadPool.QueueUserWorkItem

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

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