BackgroundWorker 多线程传值的问题 多线程datagridview 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 委托,使用委托更行datagridview 定义个委托函数,写个处理函数。private delegate void function(type parameter);void func(type parameter){……;}function ft = new function(func)();this.invoke(ft,para); 声明一个公共变量datatable 在它的RunWorkerCompleted事件中赋值给datagridview参见:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.aspx backgroundWorker是执行异步任务的,DoWork事件是开始执行具体的任务,其参数的Result为结果对象可以设置你的任务完成后的对象,任务完成的后解引发Completed事件,在此事件的参数的Result对象即为DoWork完成时的Result参数,这样就可以将任务的结果传递出来 #region 多线程 进度条 对比文档 private void work_BW(BackgroundWorker bk) { #region excel处理 Type type; type = Type.GetTypeFromProgID("ET.Application");//V8版本类型 if (type == null)//没有安装V8版本 { type = Type.GetTypeFromProgID("Ket.Application");//V9版本类型 if (type == null)//没有安装V9版本 { type = Type.GetTypeFromProgID("EXCEL.Application");//MS EXCEL类型 if (type == null) { MessageBox.Show("没有安装Office软件"); return;//没有安装Office软件 } } } dynamic app = Activator.CreateInstance(type);//根据类型创建App实例 app.Visible = false;//后台打开,不显示Excel界面 dynamic workbook = app.Workbooks.Open(OFD_1.FileName);//打开aaa.xls文件 dynamic worksheet = workbook.Worksheets[1];//获取Sheet1工作薄 //创建DateTable System.Data.DataTable table = new System.Data.DataTable("table"); int rows = worksheet.UsedRange.Rows.Count; int columns = worksheet.UsedRange.Columns.Count; for (int i = 1; i <= rows - 1; i++) { bk.ReportProgress(i); DataRow row = table.NewRow(); for (int j = 1; j <= columns; j++) { dynamic range = worksheet.Range[app.Cells[i + 1, j], app.Cells[i + 1, j]]; range.Select(); if (i == 1) { DataColumn column = new DataColumn(); column.DataType = System.Type.GetType("System.String"); column.ColumnName = worksheet.Cells[i, j].Value2; table.Columns.Add(column); } row[j - 1] = app.ActiveCell.Text.ToString(); } table.Rows.Add(row); } //传出table #endregion //绑定dataGridView dataGridView1.DataSource = table; } private void BW_DoWork(object sender, DoWorkEventArgs e) { //调用 work_BW(this.BW); } private void BW_ProgressChanged(object sender, ProgressChangedEventArgs e) { //响应进度条消息 this.pgb_jindutiao.Value = e.ProgressPercentage; } private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { System.Threading.Thread.Sleep(500);//停止500毫秒 //打开按钮启用 but_dakai.Enabled = true; //操作按钮文本=对比 but_caozuo.Text = "对比"; //操作按钮禁用 but_caozuo.Enabled = false; //隐藏进度 pgb_jindutiao.Visible = false; //this.dataGridView1.DataSource = e.Result; } #endregion public System.Data.DataTable table = new System.Data.DataTable("table");RunWorkerCompleted 事件中this.dataGridView1.DataSource = table; 已解决。 //公共变量 dynamic datatab = null; private void work_BW(BackgroundWorker bk) { //省略... datatab = table; } private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //省略... this.dataGridView1.DataSource = datatab; } 已解决。 //公共变量 dynamic datatab = null; private void work_BW(BackgroundWorker bk) { //省略... datatab = table; } private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //省略... this.dataGridView1.DataSource = datatab; }你的是VB,我那个声明是C#的,应该能理解的。 已解决。 //公共变量 dynamic datatab = null; private void work_BW(BackgroundWorker bk) { //省略... datatab = table; } private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { //省略... this.dataGridView1.DataSource = datatab; }你的是VB,我那个声明是C#的,应该能理解的。我也是C# ,我现在WinForm做Excel二次开发。 vs2003的水晶报表 为什么在报表中显示的是正确的数据 可是当导出时 显示的数据却不是报表中显示的数据 请教一个线程问题! C#转VC要多久能找到工作 winform TabControl控件的标签页中怎么加载一个窗体 100分求救.C#调用Mixer API 调节控制面板的音频设置问题! 共同学习C# 共同进步 跟我来!!!!!!!!!!! 多线程的问题 简单的类型转换问题!! 关于多线程同步事件处理内在逻辑的探究 请问有把vb程序转成c#的工具吗?急用 C#读取Word中的checkbox。。。求大神指导 网站打开服务器上共享文件夹
private delegate void function(type parameter);
void func(type parameter)
{
……;
}
function ft = new function(func)();
this.invoke(ft,para);
参见:http://msdn.microsoft.com/zh-cn/library/system.componentmodel.backgroundworker.aspx
private void work_BW(BackgroundWorker bk)
{
#region excel处理
Type type;
type = Type.GetTypeFromProgID("ET.Application");//V8版本类型
if (type == null)//没有安装V8版本
{
type = Type.GetTypeFromProgID("Ket.Application");//V9版本类型
if (type == null)//没有安装V9版本
{
type = Type.GetTypeFromProgID("EXCEL.Application");//MS EXCEL类型
if (type == null)
{
MessageBox.Show("没有安装Office软件");
return;//没有安装Office软件
}
}
}
dynamic app = Activator.CreateInstance(type);//根据类型创建App实例
app.Visible = false;//后台打开,不显示Excel界面
dynamic workbook = app.Workbooks.Open(OFD_1.FileName);//打开aaa.xls文件
dynamic worksheet = workbook.Worksheets[1];//获取Sheet1工作薄 //创建DateTable
System.Data.DataTable table = new System.Data.DataTable("table"); int rows = worksheet.UsedRange.Rows.Count;
int columns = worksheet.UsedRange.Columns.Count; for (int i = 1; i <= rows - 1; i++)
{
bk.ReportProgress(i);
DataRow row = table.NewRow();
for (int j = 1; j <= columns; j++)
{
dynamic range = worksheet.Range[app.Cells[i + 1, j], app.Cells[i + 1, j]];
range.Select();
if (i == 1)
{
DataColumn column = new DataColumn();
column.DataType = System.Type.GetType("System.String");
column.ColumnName = worksheet.Cells[i, j].Value2;
table.Columns.Add(column);
}
row[j - 1] = app.ActiveCell.Text.ToString();
}
table.Rows.Add(row);
}
//传出table #endregion //绑定dataGridView
dataGridView1.DataSource = table;
}
private void BW_DoWork(object sender, DoWorkEventArgs e)
{
//调用
work_BW(this.BW);
}
private void BW_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
//响应进度条消息
this.pgb_jindutiao.Value = e.ProgressPercentage;
}
private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
System.Threading.Thread.Sleep(500);//停止500毫秒
//打开按钮启用
but_dakai.Enabled = true;
//操作按钮文本=对比
but_caozuo.Text = "对比";
//操作按钮禁用
but_caozuo.Enabled = false;
//隐藏进度
pgb_jindutiao.Visible = false;
//this.dataGridView1.DataSource = e.Result;
}
#endregion
public System.Data.DataTable table = new System.Data.DataTable("table");RunWorkerCompleted 事件中
this.dataGridView1.DataSource = table;
dynamic datatab = null;
private void work_BW(BackgroundWorker bk)
{
//省略...
datatab = table;
}
private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//省略...
this.dataGridView1.DataSource = datatab;
}
dynamic datatab = null;
private void work_BW(BackgroundWorker bk)
{
//省略...
datatab = table;
}
private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//省略...
this.dataGridView1.DataSource = datatab;
}
你的是VB,我那个声明是C#的,应该能理解的。
dynamic datatab = null;
private void work_BW(BackgroundWorker bk)
{
//省略...
datatab = table;
}
private void BW_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
//省略...
this.dataGridView1.DataSource = datatab;
}
你的是VB,我那个声明是C#的,应该能理解的。
我也是C# ,我现在WinForm做Excel二次开发。