windowsPhone线程单一性2010-12-10 博客园 Jews有这样一个场景假设我要在一个窗体上反复的获取设备的电量状态,无疑我们都会想到使用 多线程方式,因为多线程不会使UI界面出现短暂的无法操作状态。如果我们使用 普通的 Thread方式去创建线程对象(我们叫它workThread),workThread然后 不停的抓取设备的电量状态,然后再把结果显示在UI上,但,我们不要忘记我们 这是在夸线程操作,在workThread线程更新UI界面的时候,我们得判断是否需要 调用Invoke方法;其实BLC早就想到了这个问题,计时器对象已经做好了一切工 作,我们只需要简单的拖拽一个Timer控件到窗体,就可以轻轻松松实现。事情不这麽简单如果上面的获取设备电量状态的程序只有一个界面,我们无需考虑太多,如 果这个功能是在(FormGetPower)子窗体上实现的,那么我们就可以不断的在 (FormMain)主窗体上new 子窗体,并把子窗体作为模式窗口showDialog出来,这 个showDialog过程我们可能操作很多次,也就意味着,随着子窗体每 showDialog一次,Timer也被创建一次,那么这样就很危险了,我们得保证不管 子窗体创建多少次,而Timer始终只有一个。其实很简单我们的目的只有一个,保证Timer对象的应用程序级别的单一性,很简单,单 一对象模式就可以实现1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace wmjppc.Lib
6 {
7 public class ShareThreadsHelper
8 {
9 public ShareThreadsHelper()
10 {
11
12 }
13 static private ShareThreadsHelper singleton = null;
14 /// <summary>
15 ///
16 /// </summary>
17
18 public static ShareThreadsHelper Singleton
19 {
20 get
21 {
22 if (singleton == null)
23 {
24 singleton = new ShareThreadsHelper();
25 }
26
27 return singleton;
28 }
29 }
30
31 private System.Windows.Forms.Timer timerPowerManage;
32 public System.Windows.Forms.Timer TimerPowerManage
33 {
34
35 get
36 {
37 if (timerPowerManage == null)
38 {
39 timerPowerManage = new System.Windows.Forms.Timer();
40 }
41 return timerPowerManage;
42 }
43 }
44
45 //电源管理线程状态;
46 private bool powerTimerEnabledState = false;
47 public bool PowerTimerEnabledState
48 {
49 set
50 {
51 powerTimerEnabledState = value;
52 }
53 get
54 {
55 return powerTimerEnabledState;
56 }
57 }
58
59 //用户设置的 电源电量的百分比值
60 private int powerLifePercent = 0;
61 public int PowerLifePercent
62 {
63 set
64 {
65 powerLifePercent = value;
66 }
67 get
68 {
69 return powerLifePercent;
70 }
71 }
72 //当前电量百分比
73 private int currentPowerfLifePercent = 0;
74 public int CurrentPowerfLifePercent
75 {
76 set
77 {
78 currentPowerfLifePercent = value;
79 }
80 get
81 {
82 return currentPowerfLifePercent;
83 }
84 }
85
86 }
87 }
88