Windows Phone的后台线程

本文关键字:线程 后台 Phone Windows | 更新日期: 2023-09-27 18:13:46

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

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

我看不出这两种方法之间有什么明显的区别(除了前两种方法更容易追踪)。

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

Windows Phone的后台线程

这个问题已经有了答案,但是答案有点缺乏细节(IMO)。

让我们依次进行。

System.Threading.Thread

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

答案是很少。通常,调度后台任务的日常主力是Threadpool。然而,在某些情况下,我们想要创建自己的线程。通常,这样的线程会在应用程序运行时的大部分时间内存在。它的大部分时间都被阻塞在某个等待句柄上。偶尔我们给这个句柄发信号,它就会活跃起来做一些重要的事情,但之后它又会回到睡眠状态。我们没有为此使用线程池工作项,因为我们不赞成它可能排在大量未完成任务后面的想法,其中一些任务本身可能(可能无意中)被其他一些等待阻塞。

System.ComponentModel.BackgroundWorker

这是一个围绕ThreadPool工作项的友好类包装。这个类只适用于偶尔需要使用后台线程的面向UI的开发人员。它的事件被分配到UI线程上,使得它很容易被使用。

System.Threading.ThreadPool.QueueUserWorkItem

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

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

这取决于你想做什么,你已经列出了3种非常不同的线程模型。

    基本线程
  1. 为具有单独UI线程的应用程序设计。管理线程池

你看过MSDN等吗?

http://www.albahari.com/threadin

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

你没有说明"what for",但是

  1. 基本线程-相当昂贵,不适合小作业
  2. Backgroundworker -主要用于UI +进度条工作
  3. ThreadPool -用于小型独立作业

我认为SL中不支持TPL,这是一个遗憾。

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