Windows Phone的后台线程
本文关键字:线程 后台 Phone Windows | 更新日期: 2023-09-27 18:13:46
到目前为止,在我开发Windows Phone 7应用程序的过程中,我注意到在异步线程中运行一个操作有不同的方式。
- System.Threading.Thread
- System.ComponentModel.BackgroundWorker
- System.Threading.ThreadPool.QueueUserWorkItem ()
我看不出这两种方法之间有什么明显的区别(除了前两种方法更容易追踪)。
你们在使用这些方法之前有什么要考虑的吗?你更喜欢哪一个,为什么?
这个问题已经有了答案,但是答案有点缺乏细节(IMO)。
让我们依次进行。
System.Threading.Thread
所有线程(无论如何在CLR中)最终都由这个类表示。但是,当我们想要自己创建实例时,您可能会将此包含在查询中。
答案是很少。通常,调度后台任务的日常主力是Threadpool
。然而,在某些情况下,我们想要创建自己的线程。通常,这样的线程会在应用程序运行时的大部分时间内存在。它的大部分时间都被阻塞在某个等待句柄上。偶尔我们给这个句柄发信号,它就会活跃起来做一些重要的事情,但之后它又会回到睡眠状态。我们没有为此使用线程池工作项,因为我们不赞成它可能排在大量未完成任务后面的想法,其中一些任务本身可能(可能无意中)被其他一些等待阻塞。
System.ComponentModel.BackgroundWorker
这是一个围绕ThreadPool工作项的友好类包装。这个类只适用于偶尔需要使用后台线程的面向UI的开发人员。它的事件被分配到UI线程上,使得它很容易被使用。
System.Threading.ThreadPool.QueueUserWorkItem
当你想在后台线程上做一些工作时,这是日常工作的主力。这消除了为执行某些任务而分配和取消分配单个线程的开销。它限制了线程实例的数量,以防止太多尝试并行运行的操作吞噬太多可用资源。
QueueUserWorkItem
是我调用后台操作的首选选项。
这取决于你想做什么,你已经列出了3种非常不同的线程模型。
- 基本线程为具有单独UI线程的应用程序设计。管理线程池
你看过MSDN等吗?
http://www.albahari.com/threadinHttp://msdn.microsoft.com/en-us/library/aa645740 (v = vs.71) . aspx
你没有说明"what for",但是
- 基本线程-相当昂贵,不适合小作业
- Backgroundworker -主要用于UI +进度条工作
- ThreadPool -用于小型独立作业
我认为SL中不支持TPL,这是一个遗憾。
当你的UI需要随着线程的进展而更新时,后台工作器往往更好使用,因为它处理在UI线程而不是后台线程上调用回调函数(如OnProgress回调)。另外两个不做这项工作。这件事由你来做。