代码如下:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;namespace MulitiThread
{
    public partial class Main : Form
    {
        private int nMaxThread=5;
        private int iRecordCount=0;
        private int iLoopCount=0;
        private int iThreadCount=0;
        public Main()
        {
            InitializeComponent();
        }        private void OnStart(object sender, EventArgs e)
        {
            for (int i = 0; i < 10; i++)
            {
                ThreadStart ThreadProcStart = delegate() { ThreadProc(i, i.ToString()); };
                Thread ThreadProcInstance = new Thread(ThreadProcStart);
                ThreadProcInstance.Name = "ThreadProcID:" + i;
                ThreadProcInstance.IsBackground = true;
                ThreadProcInstance.Start();
            }            /*            iRecordCount=ResultlistView.Items.Count;
            while(iLoopCount<iRecordCount)
            {
                while (iThreadCount < nMaxThread && iLoopCount != iRecordCount)
                {
                    ThreadStart ThreadProcStart = delegate() { ThreadProc(iThreadCount, iThreadCount.ToString()); };
                    Thread ThreadProcInstance = new Thread(ThreadProcStart);
                    ThreadProcInstance.Name = "ThreadProcID:" + iThreadCount;
                    ThreadProcInstance.IsBackground = true;
                    ThreadProcInstance.Start();
                    iThreadCount++;
                    iLoopCount++;
                }
                Thread.Sleep(100);
            }*/
        }        private void ThreadProc(int iID, String strText)
        {
            String strResult = "The" + iID + "Result";
            bool UpdataState;
            if(this.InvokeRequired)
            {
                SetListViewCall UpdataCall=new SetListViewCall(SetListView);
                UpdataState=(bool)this.Invoke(UpdataCall,new Object[]{iID,strResult});
            }else{
                UpdataState=SetListView(iID,strResult);
            }
            ///iThreadCount--;
            ///System.Threading.Thread.CurrentThread.Abort();
        }        private delegate bool SetListViewCall(int dIndex,String dName);        private bool SetListView(int iIndex, String strText)
        {
            ResultlistView.Items[iIndex].SubItems.Add(strText);
            ResultlistView.Refresh();
            return true;
        }        private void Main_Load(object sender, EventArgs e)
        {
            ResultlistView.Columns.Add("ID");
            ResultlistView.Columns.Add("String");
            for (int i = 0; i < 100; i++)
            {
                ResultlistView.Items.Add(i.ToString());
            }
        }
    }
}程序就一个listview和按钮为什么用for循环创建的多线程可以给ResultListView添加上数据,而While循环就是不行呢?求高手解,或者有比较好的变通方法?