日期:2014-05-17  浏览次数:20676 次

C#多线程,线程队列。
假设项目:1000条数据要插入数据库,每次1条。 
要求:用5个或多个线程来处理以上任务。线程数为变量,可人为设定。
必须是后台线程,执行任务时不会造成程序界面卡死。一个线程执行完一个任务后休息500ms立即分配新的任务,直到1000个任务处理完毕。

求详细代码(数据库操作部分省略。)

------解决方案--------------------
没测试编译,有问题再说。
private AutoResetEvent timer = new AutoResetEvent(false);

        public void ExecuteTask()
        {
            string data;
            while ((data = GetData()) != null)
            { 
                // writ to database;
                timer.WaitOne(500, false);
            }
        }

        private List<string> dataList = new List<string>();

        public object obj = new object();

        private string? GetData()
        {
            string retVal = null;
            lock (obj)
            {
                if (dataList.Count > 0)
                {
                    retVal = dataList[0];
                    dataList.RemoveAt[0];
                }
            }

            return retVal;
        }


        private void button2_Click(object sender, EventArgs e)
        {
            //string[] s = new string[] { 1,5,3,4,2,6};
            //ThreadPool.QueueUserWorkItem(
            Thread th1 = new Thread(new ThreadStart(ExecuteTask));
            th1.Start();