不好意思我是新人分数全部花去下载了请见谅!
我想问下 我把有一个文件夹里面是excel文件 (这个是要导入到access的)
我用backgroundworker做后台线程(插入access数据库)
现在我想把文件夹拖放到winform上就能全部插入access数据库
    现在问题就是不会循环执行backgroundworker 因为需要backgroundworker 执行成功后再接着执行下一个excel文件。
请教大侠怎么做!

解决方案 »

  1.   

    1.BackGroundworker一般在你需要报告状态的时候使用,比如说进度条...2.根据业务需要,可以重新包装BackGroundworker,这是很有用的,而且可以从结构层次上剥离业务与表现;3.其次,循环执行backgroundworker本身思路就不对,就你的需求而言,我可以遍历文件,然后每次开个线程去处理即可,这里的关键应该是进度统计的问题;

    foreach(遍历Excel文件)
    {
       BackGroundworker worker=new BackGroundworker();   worker.DoWork+=new DoWorkEventHandler((sender,e)=>
       {
           //ToDo
       });   worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
       {
            //ToDo
       });   worker.RunWorkerCompleted+=new ProgressChangedEventHandler((sender,e)=>
       {
            //ToDo
       });
    }
    4.多线程同时操作,这个进度控制就是个问题,我们可以用一种数据结构来保存每个线程的全部或局部数据,每个workerCompleted将其压栈处理List<BackGroundworker> list=new List<BackGroundworker>();foreach(遍历Excel文件)
    {
       BackGroundworker worker=new BackGroundworker();   worker.DoWork+=new DoWorkEventHandler((sender,e)=>
       {
           //ToDo
       });   worker.ProgressChanged+= new ProgressChangedEventHandler((sender,e)=>
       {
            //ToDo
            //list.count和遍历Excel文件的count来得出当前进度
       });   worker.RunWorkerCompleted+=new ProgressChangedEventHandler((sender,e)=>
       {
            //ToDo
            //压栈
       });
    }
    5.类推,可以使用琢磨下步骤2,进行封装
      

  2.   

    大侠 问下
     worker.RunWorkerCompleted+=new ProgressChangedEventHandler((sender,e)=>
    {
    //ToDo
    }); 
     错误 1 无法将类型“System.ComponentModel.ProgressChangedEventHandler”隐式转换为“System.ComponentModel.RunWorkerCompletedEventHandler”我改成
     worker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler((sender,e)=>
    {
    //ToDo
    }); 
    错误 1 “System.ComponentModel.RunWorkerCompletedEventArgs”不包含采用“1”个参数的构造函数 我很笨不知道怎么修改。请提点一二!
      

  3.   

    你可以查阅下BackGroundworker如何用即可,思路大致如上。看下它的3个事件,不是循环执行backgroundworker,只是根据你遍历的文件,分别开线程去跑就Ok了
      

  4.   


    RunWorkerCompleted这个事件注册时委托写错了,你看下吧对应得委托是哪个,后面的是匿名函数,语法不懂的话,去MSDN查阅一下啊