http://dotcpp.iteye.com/blog/1681444  参考,自己写写。

解决方案 »

  1.   

    默认情况下.net是不允许跨线程访问控件的,如果要使用,可以通过Control.Invoke方法,参考1楼的例子。如果自己不愿意处理线程的,也可以用BackgroundWorker来实现,具体使用方法参考MSDN。
      

  2.   

    仅供参考!
    BackgroundWorker bg = new BackgroundWorker();        public Form7()
            {
                InitializeComponent();
                bg.WorkerReportsProgress = true;
                bg.DoWork += new DoWorkEventHandler(bg_DoWork);
                bg.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bg_RunWorkerCompleted);
            }        private void bg_DoWork(object sender, DoWorkEventArgs e)
            {
                FindFile("d:\\", "*.exe");
            }        private void FindFile(string FoldPath, string filter)
            {
                try
                {
                    DirectoryInfo thefolder = new DirectoryInfo(FoldPath);
                    foreach (FileInfo nextfile in thefolder.GetFiles(filter))
                    {
                        this.listBox1.Items.Add(nextfile.FullName);
                    }
                    foreach (DirectoryInfo nextfolder in thefolder.GetDirectories())
                    {
                        FindFile(nextfolder.FullName, filter);
                    }
                }
                catch
                {            }
            }        private void bg_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
            {
                if (e.Error != null)
                {
                    MessageBox.Show(e.Error.ToString());
                }
                else
                {
                    MessageBox.Show("Completed!");
                }
            }