俗話說,一個好漢十個幫兔仰,眾人拾柴火焰高等都說明一個道理茫负,有更多的資源,更豐富的積累乎赴,都是助你走向成功忍法,走向頂峰的推動力。
本篇的公用類庫的介紹主題是程序開發(fā)中多線程操作環(huán)境中榕吼,常用到的線程相關(guān)類饿序,本篇隨筆介紹包含單件創(chuàng)建輔助類、Timer定時器友题、委托處理輔助類、隊(duì)列的線程處理服務(wù)輔助類戴质、可以取消執(zhí)行操作的線程池輔助類度宦、線程池輔助類踢匣、線程輔助類等對象,這些輔助類覆蓋了多線程開發(fā)中絕大多數(shù)的應(yīng)用戈抄。良好的封裝及操作离唬,給我們提供非常方便、高效的線程操作處理划鸽。
本篇繼續(xù)繼續(xù)整理優(yōu)化已有的共用類庫输莺,并繼續(xù)發(fā)表隨筆介紹公用類庫的接口方法以及詳細(xì)使用操作,力求給自己繼續(xù)優(yōu)化裸诽,積攢更豐富的公用類庫資源嫂用,加深了解的同時,也給大家展現(xiàn)公用類庫好的方面丈冬。
**1嘱函、單件操作輔助類 Singleton。 **
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)類對象的單件實(shí)例操作埂蕊,減少重復(fù)寫單件實(shí)現(xiàn)代碼的繁瑣往弓,簡化類的代碼。
2)創(chuàng)建一個類對象的單件實(shí)例蓄氧,類對象的構(gòu)造函數(shù)不能為Public修飾符的函似,一般為private。
實(shí)現(xiàn)代碼
1)輔助類提供的方法源碼如下所示:
/// <summary>
/// 創(chuàng)建一個類對象的單件實(shí)例喉童,類對象的構(gòu)造函數(shù)不能為Public修飾符的撇寞,一般為private。
/// </summary>
/// <typeparam name="T">待創(chuàng)建的對象類</typeparam>
public static class Singleton<T> where T : class
{
static volatile T _instance;
static object _lock = new object();
static Singleton()
{
}
/// <summary>
/// 創(chuàng)建/獲取一個可以new的類對象的單件實(shí)例
/// </summary>
public static T Instance
{
get
{
if (_instance == null)
lock (_lock)
{
if (_instance == null)
{
ConstructorInfo constructor = null;
try
{
// 構(gòu)造函數(shù)不包含public修飾符的
constructor = typeof(T).GetConstructor(BindingFlags.Instance |
BindingFlags.NonPublic, null, new Type[0], null);
}
catch (Exception exception)
{
throw new InvalidOperationException(exception.Message, exception);
}
if (constructor == null || constructor.IsAssembly)
{
throw new InvalidOperationException(string.Format("在'{0}'里面沒有找到private或者protected的構(gòu)造函數(shù)泄朴。", typeof(T).Name));
}
_instance = (T)constructor.Invoke(null);
}
}
return _instance;
}
}
2)輔助類Singleton的使用例子代碼如下所示
/// <summary>
/// 單件測試類
/// </summary>
public class TestSingletonClass
{
/// <summary>
/// 私有構(gòu)造函數(shù)
/// </summary>
private TestSingletonClass()
{
}
public void ShowMessage()
{
MessageUtil.ShowTips("單件實(shí)例測試函數(shù)");
}
}
private void btnSingleton_Click(object sender, EventArgs e)
{
//單件輔助類使用代碼
Singleton<TestSingletonClass>.Instance.ShowMessage();
}
如果沒有使用單件輔助類重抖,那么單件的測試類將會需要這樣書寫,很明顯多了很多行代碼祖灰,如果每個想單件處理的類都要這樣寫钟沛,代碼量還是很可觀的,而且比較繁瑣局扶。
/// <summary>
/// 單件測試類
/// </summary>
public class TestSingletonClass
{
private static TestSingletonClass m_Instance;
/// <summary>
/// 單件實(shí)例
/// </summary>
public static TestSingletonClass Instance
{
get
{
if (m_Instance == null)
{
m_Instance = new TestSingletonClass();
}
return m_Instance;
}
}
/// <summary>
/// 私有構(gòu)造函數(shù)
/// </summary>
private TestSingletonClass()
{
}
public void ShowMessage()
{
MessageUtil.ShowTips("單件實(shí)例測試函數(shù)");
}
}
**2恨统、定期執(zhí)行某些任務(wù)的定時器輔助類Timer。 **
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)定時器輔助類三妈,功能和另外一個定時器輔助類TimerHelper差不多畜埋。
2) 定時器操作,都通過對象鎖以及在運(yùn)行處理事件的時候畴蒲,動態(tài)改變間隔事件為無限等待悠鞍,處理完成后修改為間隔時間的方式,實(shí)現(xiàn)對定時器的正常模燥、安全執(zhí)行咖祭,不會發(fā)生運(yùn)行一半又跳到下一個的處理過程中掩宜。
3).NET提供了3種定時器實(shí)現(xiàn),他們的特點(diǎn)如下所示么翰。該Timer輔助類是基于Threading.Timer的定時器實(shí)現(xiàn)牺汤。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
#region 事件或?qū)傩?
/// <summary>
/// 按定時器周期定期引發(fā)的事件
/// </summary>
public event EventHandler Elapsed;
/// <summary>
/// 定時器任務(wù)間隔(毫秒)
/// </summary>
public int Period { get; set; }
/// <summary>
/// 指示是否在方法開始的時候,啟動定時器Elapsed事件一次浩嫌。默認(rèn)為false檐迟。
/// </summary>
public bool RunOnStart { get; set; }
#endregion
#region 構(gòu)造函數(shù)
/// <summary>
/// 創(chuàng)建一個定時器
/// </summary>
/// <param name="period">定時器間隔 (毫秒)</param>
public Timer(int period) : this(period, false)
/// <summary>
/// 創(chuàng)建一個定時器
/// </summary>
/// <param name="period">定時器間隔 (毫秒)</param>
/// <param name="runOnStart">指示是否在方法開始的時候,啟動定時器Elapsed事件一次</param>
public Timer(int period, bool runOnStart)
#endregion
#region 方法
/// <summary>
/// 啟動定時器
/// </summary>
public void Start()
/// <summary>
/// 停止定時器
/// </summary>
public void Stop()
/// <summary>
/// 等待定時器停止
/// </summary>
public void WaitToStop()
#endregion
2)輔助類Timer 的使用例子代碼如下所示
private void btnTimer_Click(object sender, EventArgs e)
{
WHC.OrderWater.Commons.Threading.Timer timer = new WHC.OrderWater.Commons.Threading.Timer(1000, true);
timer.Elapsed += new EventHandler(timer_Elapsed);
timer.Start();
}
void timer_Elapsed(object sender, EventArgs e)
{
if (!this.InvokeRequired)
return;
this.Invoke(new MethodInvoker(delegate()
{
this.btnTimer.Text = DateTime.Now.ToLongTimeString();
}));
}
3码耐、定時器輔助類TimerHelper追迟,可指定運(yùn)行間隔、延遲啟動時間等操作伐坏。
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)定時器輔助類怔匣,可指定運(yùn)行間隔、延遲啟動時間等操作桦沉。功能和另外一個定時器輔助類Timer差不多每瞒。
2)定時器操作,都通過對象鎖以及在運(yùn)行處理事件的時候纯露,動態(tài)改變間隔事件為無限等待剿骨,處理完成后修改為間隔時間的方式,實(shí)現(xiàn)對定時器的正常埠褪、安全執(zhí)行浓利,不會發(fā)生運(yùn)行一半又跳到下一個的處理過程中。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
/// <summary>
/// 定時器執(zhí)行操作的函數(shù)原型
/// </summary>
public delegate void TimerExecution();
/// <summary>
/// 定時器執(zhí)行時調(diào)用的操作
/// </summary>
public event TimerExecution Execute;
/// <summary>
/// 創(chuàng)建一個指定時間間隔的定時器钞速,并在指定的延遲后開始啟動贷掖。(默認(rèn)間隔為100毫秒)
/// </summary>
public TimerHelper()
/// <summary>
/// 創(chuàng)建一個指定時間間隔的定時器,并在指定的延遲后開始啟動渴语。
/// </summary>
/// <param name="interval">定時器執(zhí)行操作的間隔時間(毫秒)</param>
/// <param name="startDelay">指定的延遲時間(毫秒)</param>
public TimerHelper(long interval, int startDelay)
/// <summary>
/// 創(chuàng)建一個指定時間間隔的定時器
/// </summary>
/// <param name="interval">定時器執(zhí)行操作的間隔時間(毫秒)</param>
/// <param name="start">是否啟動</param>
public TimerHelper(long interval, bool start)
/// <summary>
/// 啟動定時器并指定延遲時間(毫秒)
/// </summary>
/// <param name="delayBeforeStart">指定延遲時間(毫秒)</param>
public void Start(int delayBeforeStart)
/// <summary>
/// 立即啟動定時器
/// </summary>
public void Start()
/// <summary>
/// 暫停定時器
/// 注意:運(yùn)行中的線程不會被停止
/// </summary>
public void Pause()
/// <summary>
/// 停止定時器
/// 注意:運(yùn)行中的線程不會被停止
/// </summary>
public void Stop()
/// <summary>
/// 定時器的處理時間
/// </summary>
/// <param name="obj"></param>
public void Tick(object obj)
/// <summary>
/// 定時器的狀態(tài)
/// </summary>
public TimerState State
/// <summary>
/// 獲取或設(shè)置定時器的運(yùn)行間隔
/// </summary>
public long Interval
2)輔助類TimerHelper的使用例子代碼如下所示
public FrmNewHouse()
{
InitializeComponent();
if (!this.DesignMode)
{
this.winGridViewPager1.OnPageChanged += new EventHandler(winGridViewPager1_OnPageChanged);
this.winGridViewPager1.OnStartExport += new EventHandler(winGridViewPager1_OnStartExport);
this.winGridViewPager1.OnRefresh += new EventHandler(winGridViewPager1_OnRefresh);
this.winGridViewPager1.OnGridViewMouseDoubleClick += new EventHandler(winGridViewPager1_OnGridViewMouseDoubleClick);
this.winGridViewPager1.ShowLineNumber = true;
this.winGridViewPager1.PagerInfo.PageSize = 20;
this.winGridViewPager1.BestFitColumnWith = true;
this.winGridViewPager1.AppendedMenu = this.contextMenuStrip1;
this.winGridViewPager1.gridView1.RowCellStyle += new DevExpress.XtraGrid.Views.Grid.RowCellStyleEventHandler(gridView1_RowCellStyle);
//使用定時器苹威,定時刷新窗體的數(shù)據(jù),并提示客戶更新情況
int interval = Portal.gc.GetRefreshSecond();//獲取定時間隔時間
TimerHelper timer = new TimerHelper(interval, true);
timer.Execute += new TimerHelper.TimerExecution(timer_Execute);
}
}
//通過Invoke來實(shí)現(xiàn)跨線程間的調(diào)用
void timer_Execute()
{
if (!this.InvokeRequired)
return;
this.Invoke(new MethodInvoker(delegate()
{
NotifyNewHouse();
}));
}
4驾凶、提供一個隊(duì)列的線程處理服務(wù)輔助類 QueueServer牙甫。
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)提供一個隊(duì)列的線程處理服務(wù)操作。QueueServer是一個先入先出(FIFO)的隊(duì)列處理服務(wù)调违。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
#region 屬性方法
/// <summary>
/// 是否是背景線程
/// </summary>
public bool IsBackground
/// <summary>
/// 執(zhí)行隊(duì)列
/// </summary>
public T[] Items
/// <summary>
/// 隊(duì)列數(shù)量
/// </summary>
public int QueueCount
/// <summary>
/// 將對象加到隊(duì)列結(jié)尾
/// </summary>
/// <param name="item"></param>
public void EnqueueItem(T item)
/// <summary>
/// 清除隊(duì)列
/// </summary>
public void ClearItems()
#endregion
#region 線程處理
/// <summary>
/// 處理單個元素
/// </summary>
/// <param name="item">元素項(xiàng)目</param>
protected virtual void OnProcessItem(T item)
/// <summary>
/// 處理函數(shù)
/// </summary>
public event Action<T> ProcessItem;
#endregion
2)輔助類QueueServer的使用例子代碼如下所示
private void btnQueneServer_Click(object sender, EventArgs e)
{
QueueServer<PreDataInfo> queueServer = new QueueServer<PreDataInfo>();
queueServer.IsBackground = true;
queueServer.ProcessItem += new Action<PreDataInfo>(queueServer_ProcessItem);
//循環(huán)入隊(duì)
for (int i = 0; i < 100; i++)
{
queueServer.EnqueueItem(new PreDataInfo(i.ToString(), DateTime.Now.ToString()));
Thread.Sleep(10);
}
}
/// <summary>
/// 處理每個出隊(duì)的操作
/// </summary>
void queueServer_ProcessItem(PreDataInfo obj)
{
Console.WriteLine("{0} : {1}", obj.Key, obj.Data);
}
}
public class PreDataInfo
{
public string Key;
public string Data;
public PreDataInfo()
{
}
public PreDataInfo(string key, string data)
{
this.Key = key;
this.Data = data;
}
}
5窟哺、可以取消執(zhí)行操作的線程池輔助類 AbortableThreadPool。
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)可以取消執(zhí)行操作的線程池操作技肩。
2)AbortableThreadPool線程輔助類可以使用常用的多線程處理環(huán)境中且轨,也可以使用在有些在運(yùn)行過程中可能需要取消的線程處理環(huán)境中。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
/// <summary>
/// 把執(zhí)行操作放到隊(duì)列中。當(dāng)線程池的線程可用的時候旋奢,方法執(zhí)行阿蝶。
/// </summary>
/// <param name="callback">一個代表將要執(zhí)行方法的WaitCallback對象</param>
public static WorkItem QueueUserWorkItem(WaitCallback callback)
/// <summary>
/// 把執(zhí)行操作放到隊(duì)列中,并指定了一個對象黄绩,它包含將要執(zhí)行方法的數(shù)據(jù)。
/// 當(dāng)線程池的線程可用的時候玷过,方法執(zhí)行爽丹。
/// </summary>
/// <param name="callback">一個代表將要執(zhí)行方法的WaitCallback對象</param>
/// <param name="state">一個對象,它包含將要執(zhí)行方法的數(shù)據(jù)</param>
public static WorkItem QueueUserWorkItem(WaitCallback callback, object state)
/// <summary>
/// 取消指定的隊(duì)列中的工作項(xiàng)辛蚊。
/// </summary>
/// <param name="item">線程池中取消的項(xiàng)目</param>
/// <param name="allowAbort">如果設(shè)置為<see langword="true"/>則允許終止線程</param>
/// <returns>項(xiàng)目隊(duì)列的狀態(tài)</returns>
public static WorkItemStatus Cancel(WorkItem item, bool allowAbort)
/// <summary>
/// 獲取指定隊(duì)列中工作項(xiàng)的狀態(tài)
/// </summary>
/// <param name="item">線程池中工作項(xiàng)</param>
/// <returns>工作項(xiàng)的狀態(tài)</returns>
public static WorkItemStatus GetStatus(WorkItem item)
/// <summary>
/// 取消所有任務(wù)
/// </summary>
/// <param name="allowAbort">線程是否終止</param>
public static void CancelAll(bool allowAbort)
/// <summary>
/// 類似Thread.Join,等待AbortableThreadPool執(zhí)行完成
/// </summary>
public static void Join()
/// <summary>
/// 類似Thread.Join,等待AbortableThreadPool執(zhí)行完成
/// </summary>
/// <param name="millisecondsTimeout">等待的毫秒數(shù)</param>
/// <returns></returns>
public static bool Join(int millisecondsTimeout)
/// <summary>
/// 類似Thread.Join,等待AbortableThreadPool執(zhí)行完成
/// </summary>
/// <param name="timeout">等待的時間范圍</param>
/// <returns></returns>
public static bool Join(TimeSpan timeout)
/// <summary>
/// 在隊(duì)列中粤蝎,還未執(zhí)行處理的數(shù)量
/// </summary>
public static int QueueCount
/// <summary>
/// 在執(zhí)行中的線程數(shù)量
/// </summary>
public static int WorkingCount
2)輔助類AbortableThreadPool的使用例子代碼如下所示
private void btnAbortableThreadPool_Click(object sender, EventArgs e)
{
Console.WriteLine(string.Format("QueueCount:{0},WorkingCount:{1}", AbortableThreadPool.QueueCount, AbortableThreadPool.WorkingCount));
WorkItem workItem1 = AbortableThreadPool.QueueUserWorkItem(new WaitCallback(Test));
Console.WriteLine(string.Format("QueueCount:{0},WorkingCount:{1}", AbortableThreadPool.QueueCount, AbortableThreadPool.WorkingCount));
WorkItem workItem2 = AbortableThreadPool.QueueUserWorkItem(new WaitCallback(Test));
WorkItem workItem3 = AbortableThreadPool.QueueUserWorkItem(new WaitCallback(Test));
WorkItem workItem4 = AbortableThreadPool.QueueUserWorkItem(new WaitCallback(Test));
WorkItem workItem5 = AbortableThreadPool.QueueUserWorkItem(new WaitCallback(Test));
Console.WriteLine(string.Format("QueueCount:{0},WorkingCount:{1}", AbortableThreadPool.QueueCount, AbortableThreadPool.WorkingCount));
Thread.Sleep(1000);
Console.WriteLine(AbortableThreadPool.Cancel(workItem1, false));
Console.WriteLine(string.Format("QueueCount:{0},WorkingCount:{1}", AbortableThreadPool.QueueCount, AbortableThreadPool.WorkingCount));
Thread.Sleep(1000);
Console.WriteLine(AbortableThreadPool.Cancel(workItem1, true));
Console.WriteLine(string.Format("QueueCount:{0},WorkingCount:{1}", AbortableThreadPool.QueueCount, AbortableThreadPool.WorkingCount));
Thread.Sleep(1000);
//AbortableThreadPool.CancelAll(true);//可取消所有任務(wù)
AbortableThreadPool.Join(); //等待所有任務(wù)退出
Console.WriteLine(string.Format("QueueCount:{0},WorkingCount:{1}", AbortableThreadPool.QueueCount, AbortableThreadPool.WorkingCount));
}
static void Test(object state)
{
int i = 100;
while (i-- > 0)
{
Console.WriteLine(i);
Thread.Sleep(new Random((int)DateTime.Now.Ticks).Next(100));
}
}
6、委托處理輔助類DelegateHelper袋马。
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)委托的處理初澎。
2)使用委托處理輔助類DelegateHelper,可以快速執(zhí)行或者取消一些委托方法的執(zhí)行虑凛。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
/// <summary>
/// 執(zhí)行委托操作
/// </summary>
/// <param name="target">目標(biāo)委托對象</param>
/// <param name="args">參數(shù)</param>
public static WorkItem InvokeDelegate(Delegate target, params object[] args)
/// <summary>
/// 執(zhí)行委托操作
/// </summary>
/// <param name="target">目標(biāo)委托對象</param>
public static WorkItem InvokeDelegate(Delegate target)
/// <summary>
/// 中止指定的隊(duì)列中委托
/// </summary>
/// <param name="target">目標(biāo)委托對象</param>
/// <returns>項(xiàng)目隊(duì)列中止操作的狀態(tài)</returns>
public static WorkItemStatus AbortDelegate(WorkItem target)
2)輔助類DelegateHelper的使用例子代碼如下所示
private void btnDelegeteHelper_Click(object sender, EventArgs e)
{
//無參數(shù)的委托
DelegateHelper.InvokeDelegate(new UpdateTextDelegate(this.UpdateText));
//有參數(shù)的委托
DelegateHelper.InvokeDelegate(new UpdateTextDelegate2(this.UpdateText), 100);
}
private delegate void UpdateTextDelegate();
private delegate void UpdateTextDelegate2(int count);
private void UpdateText()
{
for (int i = 0; i < 1000; i++)
{
Thread.Sleep(100);
}
}
private void UpdateText(int count)
{
for (int i = 0; i < count; i++)
{
Thread.Sleep(100);
}
}
7碑宴、線程池輔助操作類 ThreadPoolHelper。
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)線程池輔助操作桑谍。延柠。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
/// <summary>
/// 方法委托
/// </summary>
public delegate void WaitCallbackNew();
/// <summary>
/// 把執(zhí)行方法放到隊(duì)列中。
/// 當(dāng)線程池線程變?yōu)榭捎玫臅r候锣披,方法執(zhí)行贞间。
/// </summary>
/// <param name="callback">委托對象</param>
public static bool QueueUserWorkItem(WaitCallbackNew callback)
/// <summary>
/// 把執(zhí)行方法放到隊(duì)列中。
/// 當(dāng)線程池線程變?yōu)榭捎玫臅r候雹仿,方法執(zhí)行增热。
/// </summary>
/// <param name="proc">委托對象數(shù)組</param>
/// <returns></returns>
public static bool QueueUserWorkItems(params WaitCallbackNew[] proc)
/// <summary>
///等待指定數(shù)組中所有元素收到信號
/// </summary>
public static bool WaitAll()
/// <summary>
///等待指定數(shù)組中任何一個元素收到信號
/// </summary>
/// <returns>滿足等待的對象數(shù)組索引</returns>
public static int WaitAny()
2)輔助類ThreadPoolHelper的使用例子代碼如下所示
private void UpdateText()
{
for (int i = 0; i < 50; i++)
{
Thread.Sleep(100);
}
}
private void btnThreadPool_Click(object sender, EventArgs e)
{
ThreadPoolHelper.QueueUserWorkItem(new ThreadPoolHelper.WaitCallbackNew(UpdateText));
ThreadPoolHelper.WaitAny(); //阻塞主界面線程,到5秒循環(huán)結(jié)束后胧辽,主界面可以操作
}
8峻仇、線程操作輔助類ThreadHelper。
實(shí)現(xiàn)效果
- 本輔助類主要是用來方便實(shí)現(xiàn)線程的各種操作票顾,包括設(shè)置線程名稱础浮、優(yōu)先級等及把執(zhí)行方法放到隊(duì)列中執(zhí)行等基礎(chǔ)性的線程操作。
實(shí)現(xiàn)代碼
1)輔助類提供的方法接口如下所示:
/// <summary>
/// 線程名稱奠骄,最長不超過10個字符豆同!
/// </summary>
/// <param name="name">線程名稱</param>
public static void SetThreadName(string name)
/// <summary>
/// 設(shè)置線程優(yōu)先級
/// </summary>
/// <param name="priority">線程優(yōu)先級</param>
public static void SetThreadPriority(ThreadPriority priority)
/// <summary>
/// 設(shè)置主線程的UI Culture
/// </summary>
/// <param name="cultureName"></param>
public static void SetMainThreadUICulture(string cultureName)
/// <summary>
/// 把執(zhí)行方法放到隊(duì)列中,并指定了一個對象含鳞,它包含使用該方法的數(shù)據(jù)影锈。
/// 當(dāng)線程池線程變?yōu)榭捎玫臅r候,方法執(zhí)行。
/// </summary>
/// <param name="callBack">工作項(xiàng)(WaitCallback)對象</param>
/// <param name="threadName">線程名稱鸭廷,最長不超過10個字符枣抱!</param>
/// <param name="priority">線程優(yōu)先級</param>
public static bool Queue(WaitCallback callBack, string threadName, ThreadPriority priority)
/// <summary>
/// 把執(zhí)行方法放到隊(duì)列中,并指定了一個對象辆床,它包含使用該方法的數(shù)據(jù)佳晶。
/// 當(dāng)線程池線程變?yōu)榭捎玫臅r候,方法執(zhí)行讼载。
/// </summary>
/// <param name="callBack">工作項(xiàng)(WaitCallback)對象</param>
/// <param name="threadName">線程名稱轿秧,最長不超過10個字符!</param>
/// <param name="state">執(zhí)行方法的數(shù)據(jù)</param>
/// <param name="priority">線程優(yōu)先級</param>
public static bool Queue(WaitCallback callBack, string threadName, object state, ThreadPriority priority)
/// <summary>
/// 線程休眠一段毫秒時間
/// </summary>
/// <param name="millisecondsTimeout">一段毫秒時間</param>
public static void Sleep(int millisecondsTimeout)
/// <summary>
/// 線程休眠一段時間
/// </summary>
/// <param name="timeOut"></param>
public static void Sleep(TimeSpan timeOut)
2)輔助類ThreadHelper的使用例子代碼如下所示
CHM幫助文檔持續(xù)更新中咨堤,統(tǒng)一下載地址是: http://www.iqidi.com/download/commonshelp.rar
公用類庫DLL+XML注釋文件下載地址是:http://files.cnblogs.com/wuhuacong/WHC.OrderWater.Commons.rar