+ -
当前位置:首页 → 问答吧 → C# winform处理拖拽到上面的数据

C# winform处理拖拽到上面的数据

时间:2011-12-14

来源:互联网

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

作者: dxl3811051   发布时间: 2011-12-14

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,进行封装

作者: ZeroKiseki   发布时间: 2011-12-14

大侠 问下
 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”个参数的构造函数

我很笨不知道怎么修改。请提点一二!

作者: dxl3811051   发布时间: 2011-12-14