實現效果
- 本輔助類主要是用來方便實現線程的各種操作,包括設置線程名稱、優先級等及把執行方法放到隊列中執行等基礎性的線程操作。
實現步驟
- 在C#軟件項目中引用ThreadHelper代碼實現動態調用。
實現代碼
/// 線程名稱,最長不超過10個字符
public static void SetThreadName(string name)
/// 設置線程優先級
public static void SetThreadPriority(ThreadPriority priority)
/// 設置主線程的UI Culture
public static void SetMainThreadUICulture(string cultureName)
/// 把執行方法放到隊列中,並指定了一個對象,它包含使用該方法的數據。
/// 當線程池線程變爲可用的時候,方法執行。
public static bool Queue(WaitCallback callBack, string threadName, ThreadPriority priority)
/// 把執行方法放到隊列中,並指定了一個對象,它包含使用該方法的數據。
/// 當線程池線程變爲可用的時候,方法執行。
public static bool Queue(WaitCallback callBack, string threadName, object state, ThreadPriority priority)
/// 線程休眠一段毫秒時間
public static void Sleep(int millisecondsTimeout)
/// 線程休眠一段時間
public static void Sleep(TimeSpan timeOut)
附上源碼
/// <summary>
/// 線程操作輔助類
/// </summary>
public class ThreadHelper
{
private static CultureInfo mainCulture;
/// <summary>
/// 線程名稱,最長不超過10個字符!
/// </summary>
/// <param name="name">線程名稱</param>
public static void SetThreadName(string name)
{
if (Thread.CurrentThread.Name != null)
{
return;
}
Thread.CurrentThread.Name = "SVNM_" + name.PadRight(10);
if (mainCulture != null)
{
Thread.CurrentThread.CurrentUICulture = mainCulture;
}
}
/// <summary>
/// 設置線程優先級
/// </summary>
/// <param name="priority">線程優先級</param>
public static void SetThreadPriority(ThreadPriority priority)
{
if (Thread.CurrentThread.Priority != priority)
{
Thread.CurrentThread.Priority = priority;
}
}
/// <summary>
/// 設置主線程的UI Culture
/// </summary>
/// <param name="cultureName"></param>
public static void SetMainThreadUICulture(string cultureName)
{
try
{
LogTextHelper.Info(string.Format("UICulture = {0}", cultureName));
var culture = new CultureInfo(cultureName);
mainCulture = culture;
Thread.CurrentThread.CurrentUICulture = culture;
}
catch (Exception ex)
{
LogTextHelper.Error(string.Format("Error setting UICulture: {0}", cultureName), ex);
}
}
/// <summary>
/// 把執行方法放到隊列中,並指定了一個對象,它包含使用該方法的數據。
/// 當線程池線程變爲可用的時候,方法執行。
/// </summary>
/// <param name="callBack">工作項(WaitCallback)對象</param>
/// <param name="threadName">線程名稱,最長不超過10個字符!</param>
/// <param name="priority">線程優先級</param>
public static bool Queue(WaitCallback callBack, string threadName, ThreadPriority priority)
{
return Queue(callBack, threadName, null, priority);
}
/// <summary>
/// 把執行方法放到隊列中,並指定了一個對象,它包含使用該方法的數據。
/// 當線程池線程變爲可用的時候,方法執行。
/// </summary>
/// <param name="callBack">工作項(WaitCallback)對象</param>
/// <param name="threadName">線程名稱,最長不超過10個字符!</param>
/// <param name="state">執行方法的數據</param>
/// <param name="priority">線程優先級</param>
public static bool Queue(WaitCallback callBack, string threadName, object state, ThreadPriority priority)
{
WaitCallback start = delegate(object _state)
{
SetThreadName(threadName);
SetThreadPriority(priority);
callBack(_state);
};
return ThreadPool.QueueUserWorkItem(start, state);
}
/// <summary>
/// 線程休眠一段毫秒時間
/// </summary>
/// <param name="millisecondsTimeout">一段毫秒時間</param>
public static void Sleep(int millisecondsTimeout)
{
Thread.Sleep(millisecondsTimeout);
}
/// <summary>
/// 線程休眠一段時間
/// </summary>
/// <param name="timeOut"></param>
public static void Sleep(TimeSpan timeOut)
{
Thread.Sleep(timeOut);
}
}