Thread中带参方法无法使用之解决方案


using System;
using System.Collections.Generic;
using System.Collections;
using System.Threading;
namespace ThreadHelperLib
{
    public class ThreadHelper
    {
        public ThreadHelper()
        {

        }
        ~ThreadHelper() { }

        #region 私有变量
        /// <summary>
        /// 当前线程       
        /// </summary>
        private Thread thrWork = null;
        /// <summary>
        /// 参数集合
        /// </summary>
        private List<object> objParams = new List<object>();
        /// <summary>
        /// 方法
        /// </summary>
        private Delegate Method = null ;

        /// <summary>
        /// 线程结束标识
        /// </summary>
        private bool overFlag = false;

        private string Error = string.Empty;

        #endregion

        #region 公共方法

        /// <summary>
        /// 设置参数
        /// </summary>
        /// <param name="o"></param>
        public void SetParams(object o)
        {
            objParams.Add(o);
        }
        /// <summary>
        /// 设置方法
        /// </summary>
        /// <param name="pMethod"></param>
        public void SetMethod(Delegate pMethod)
        {
            Method = pMethod;
        }
        public bool StartThread()
        {
            try
            {
                ThreadStart myThreadStart = new ThreadStart(this.ThreadProc);
                thrWork = new Thread(myThreadStart);
                thrWork.Start();
                return true;
            }
            catch (ThreadStartException e)
            {
                Error = e.ToString();
                thrWork.Abort();
                return false;
            }
        }
        public void EndStart()
        {
            if (this.overFlag)
            {
                this.thrWork.Abort();
            }
        }
        /// <summary>
        /// 错误消息
        /// </summary>
        /// <returns></returns>
        public  string outError()
        {
            return this.Error;
        }
        #endregion

        #region 私有方法

      
        private void ThreadProc()
        {
            try
            {
                System.Collections.IEnumerator m_Enum = objParams.GetEnumerator();
                while (m_Enum.MoveNext())
                {
                    Method.DynamicInvoke(m_Enum.Current);
                }
            }
            catch (ThreadStateException err)
            {
                this.Error = err.ToString();
            }
            finally
            {
                this.overFlag = true;
            }
        }
        #endregion
    }

}



using System;
using System.Collections.Generic;
using System.Text;

using ThreadHelperLib;
namespace helloWorld
{
  
    class Program
    {
       private delegate void TestCall(string str);
        static void Main()
        {
           string state = "123";
           for (int i = 0; i < 3000; i++)
           {
               ThreadHelper thr = new ThreadHelper();
               thr.SetMethod(new TestCall(test));
               thr.SetParams(i.ToString());
               thr.StartThread();
               thr.EndStart();
           }
         

        
            Console.ReadLine();
           
        }
        private static void test(string state)
        {
            Console.WriteLine(state);
        }
      

        static void c_OnTestHandler()
        {
            Console.WriteLine("sadfasdfsadf");
        }
      
    }
}

posted @ 2006-12-20 15:06  Leepy  阅读(564)  评论(0编辑  收藏  举报