System.IO.DirectoryInfo _DI = new DirectoryInfo(@"d:\Project"); 
FileInfo[] _files = _DI.GetFiles(); 
foreach(FileInfo _file in _files) 

try 

_file.CopyTo(@"D\Copy"); 

catch 

this.listBox1.Items.Add(" the file {0}  fail;" + _file.Name); 

}
我通過上面的代碼实现把一个文件夹里的所有文件(文件数量随机的)循環复制到另一个文件夹.
但是如果碰上大文件時就會出現“假死”的現像所以想用Backgroundworker來做多線程循環复制,要怎麼做啊?謝謝各位........

解决方案 »

  1.   

    单开一个线程就可以了。Thread t = new Thread(new ThreadStart(DoCopy));
    t.Start();private void DoCopy()
    {
    System.IO.DirectoryInfo _DI = new DirectoryInfo(@"d:\Project"); 
    FileInfo[] _files = _DI.GetFiles(); 
    foreach(FileInfo _file in _files) 

    try 

    _file.CopyTo(@"D\Copy"); 

    catch 

    this.listBox1.Items.Add(" the file {0}  fail;" + _file.Name); 


    }
      

  2.   

    http://www.chenjiliang.com/Article/View.aspx?ArticleID=2293&TypeID=98可以参考这里
      

  3.   

    恩,开是线程,或者是家个Application.DoEvent()也可以
      

  4.   


    其實我的後台代碼是有4個Timer控件,不同的Timer控件分別執行不同的Copy任務,只是Timer執行的時間有些比較長,有些比較短而已。
    如果只開一個線程哪會不會不會執行別的COPY任務啊
      

  5.   

    线程就是在后台执行的操作。如果你的Timer执行的CPOY任务跟线程里的任务操作了相同的对象,那么请加互斥锁。否则会死锁的。简单的加锁请查看LOCK关键字。
      

  6.   

    其實我可要在Form_Load中寫:
    Thread a = new Thread(new ThreadStart(DoC));
    a.Start();
    Thread b = new Thread(new ThreadStart(DoC));
    b.Start();
    Thread c = new Thread(new ThreadStart(DoC));
    c.Start();
    這樣來執行三個進程,分別執行不同的Copy任務,但是怎麼樣在我的代碼中執行循環复制
    private void DoCopy()
    {
    System.IO.DirectoryInfo _DI = new DirectoryInfo(@"d:\Project"); 
    FileInfo[] _files = _DI.GetFiles(); 
    foreach(FileInfo _file in _files) 

    try 

    _file.CopyTo(@"D\Copy"); 

    catch 

    this.listBox1.Items.Add(" the file {0}  fail;" + _file.Name); 


    }
    在這代碼中加入循環复制?怎麼樣加啊???
      

  7.   

    Thread t = new Thread(new ThreadStart(DoCopy));
    t.Start();private void DoCopy()
    {
    System.IO.DirectoryInfo _DI = new DirectoryInfo(@"d:\Project"); 
    FileInfo[] _files = _DI.GetFiles(); 
    foreach(FileInfo _file in _files) 

    try 

    _file.CopyTo(@"D\Copy"); 

    catch 

    this.listBox1.Items.Add(" the file {0}  fail;" + _file.Name); 


    }用这个线程就行了