C#實現線程操作輔助類ThreadHelper

實現效果

  • 本輔助類主要是用來方便實現線程的各種操作,包括設置線程名稱、優先級等及把執行方法放到隊列中執行等基礎性的線程操作。

實現步驟

  • 在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);
        }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章