winfom异步更新

小白有个问题,winform异步更新ui,用thread可以处理,但是这样的话我按钮每点一次就会创建一个线程。我想实现的是点一下按钮后有个线程来处理这个事件,处理完后线程就直接回收。后来想用线程池来处理,但是写了线程池,代码就不执行了,大佬帮忙看看

        //选择结果文件导入
        private void button7_Click(object sender, EventArgs e)
        {

            ThreadPool.QueueUserWorkItem(new WaitCallback(input),10);
            Thread.Sleep(500);
        }





       private void input(object obj)
        {
            try
            {
                OpenFileDialog fileDialog = new OpenFileDialog();
                fileDialog.Multiselect = true;
                fileDialog.Title = "请选择结果文件XML";
                fileDialog.Filter = "所有文件(*.xml*)|*.xml*";
                if (fileDialog.ShowDialog() == DialogResult.OK)
                {


                    progressBar1.Value = 0;
                    string[] names = fileDialog.FileNames;
                    XHYUN rm = new XHYUN();
                    foreach (string file in names)
                    {
                        richTextBox2.AppendText("文件:" + file.ToString() + "{\n");
                        string msg;
                        bi = rm.GetInfo(file.ToString());
                        msg = rm.import(bi);
                        // richTextBox2.AppendText(msg);
                        richTextBox2.AppendText("}\n");
                        log.CheckLog(DateTime.Now + "   ->" + "上传结果至平台完成:" + "\r\n" + msg + "\r\n");
                    }

                    thread.IsBackground = true;
                    thread.Start();
                    threadList.Add(thread);

                }
            }
            catch (Exception exp)
            {

                MessageBox.Show("导入失败,报错信息为:" + exp.ToString());
                log.CheckLog(DateTime.Now + "   ->" + "上传结果至平台失败:" + "\r\n" + exp.ToString() + "\r\n");
            }
        }

我就想实现点击按钮后程序不要假死,又不要创建过多的线程

自己解决了,,,,ui线程用委托,

        public Form1()
        {
            InitializeComponent();
            CheckForIllegalCrossThreadCalls = false;//使线程可以调用窗体控件
            form1 = this;
            ThreadPool.SetMaxThreads(3, 3);
        }

线程池是这么设置的