解决方案 »

  1.   

    不要想着“当执行完这行之后,在将这个线程分配给没有执行过的行”。这样把问题复杂化。
    直接调用.net的线程池,一切交给系统去自动分配。    public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();        }        class ThreadItem
            {
                public string Name { get; set; }
                public Action Finished { get; set; }
                public void DoWork()
                {
                    int sum = 0;
                    for (int i = 0; i < 100; i++)
                    {
                        Thread.Sleep(1);
                        sum += i;
                    }
                    this.Name = "Result=" + sum;
                    if (Finished != null) Finished();
                }
            }        List<ThreadItem> items = null;
            private void Form1_Shown(object sender, EventArgs e)
            {
                items = new List<ThreadItem>(Enumerable.Range(1, 15)
                     .Select(i => new ThreadItem()
                     {
                         Name = "Thread" + i,
                         Finished = () => listBox1.Invoke(new Action(loadData))
                     }));
                loadData();
                items.ForEach(item => ThreadPool.QueueUserWorkItem(state => item.DoWork()));
            }        void loadData()
            {
                listBox1.DataSource = null;
                listBox1.DataSource = items;
                listBox1.DisplayMember = "Name";
            }
        }
      

  2.   

    你的FTP多线程导入的文本格式是怎么样的?