我的数据在dataGridView里,我想把他导出到excel中,代码如下:for (int i = 1; i <= dataGridView1.Rows.Count-1; i++)
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
xSheet.get_Range(((Char)(65 + j)) + i.ToString(), Type.Missing).Value2 = dataGridView1[j, i - 1].Value.ToString();
label2.Text = "共" + dataGridView1.Rows.Count.ToString() + "行,现已导出" + i.ToString() + "行!"; //这行的问题!
Type.Missing).Value2 = dt.Rows[i][j].ToString();
}
}
问题是:我现在如何做一个进程,单独显示已导出多少行,共多少行,怎么传参到新的线程里,让他的值改变?
{
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
xSheet.get_Range(((Char)(65 + j)) + i.ToString(), Type.Missing).Value2 = dataGridView1[j, i - 1].Value.ToString();
label2.Text = "共" + dataGridView1.Rows.Count.ToString() + "行,现已导出" + i.ToString() + "行!"; //这行的问题!
Type.Missing).Value2 = dt.Rows[i][j].ToString();
}
}
问题是:我现在如何做一个进程,单独显示已导出多少行,共多少行,怎么传参到新的线程里,让他的值改变?
解决方案 »
- 求助如何通过本地htm文件提取出相应数据?
- 关于C#Winform的 gridview 直接编辑后同步到数据库的问题
- winform如何让DataGridView中的某一列变成textbox
- 请教tabControl里面一个方法
- 高分求解,MediaPlayer播放时占用带宽问题
- C#数组
- DeleteButton.visible=!DeleteButton.visible;
- 这么简单的数据库操作都出错,谁来帮我
- C#的构造函数问题,简单
- 数据库存储过程的处理
- 关于WebForm中如何替代winform中的BindingManagerBase的问题
- 在多线程编程序时,如果在所有的线程结束时得到一个事件?系统的要求,不能使用线程池中的线程。
private void button1_Click(object sender, EventArgs e)
{
Thread newThread = new Thread(new ThreadStart(Run));
newThread.Start();
button1.Enabled = false;
CreateControl("System.Windows.Forms.TextBox", this, 10, 10);
} private void Run()
{
MethodInvoker mi = new MethodInvoker(UpdateProgress);
while (true)
{
Invoke(mi);
Thread.Sleep(10);
}
} private void UpdateProgress()
{
i++;
if (i % 100 == 0)
{
progressBar1.Increment(1);
}
button1.Text = i.ToString();
if (progressBar1.Value == 10)
{
button1.Enabled = true;
}
if (progressBar1.Value == 80)
{
Thread.CurrentThread.Abort();
this.Close();
}
}
ref:
http://blog.csdn.net/knight94/archive/2006/05/27/757351.aspx
{
showCountDelegate MyDelegate = showCountDelegate(i,dataGridView1.Rows.Count)
{
System.Console.WriteLine("daochu:{0} zonggong{1}",i,dataGridView1.Rows.Count);
};
this.invoke(MyDelegate,new object[]{i,dataGridView1.Rows.Count});
for (int j = 0; j < dataGridView1.Columns.Count; j++)
{
xSheet.get_Range(((Char)(65 + j)) + i.ToString(), Type.Missing).Value2 = dataGridView1[j, i - 1].Value.ToString();
label2.Text = "共" + dataGridView1.Rows.Count.ToString() + "行,现已导出" + i.ToString() + "行!"; //这行的问题!
Type.Missing).Value2 = dt.Rows[i][j].ToString();
}
}delegate void showCountDelegate(int i,int count);
这样试试呢?
工作线程工作在适当的地方,修改该变量,并且释放一个信号量,
UI线程在循环等待信号量,一旦等到,就更新进度条显示要做简单点也可以不用信号量,UI线程定时查询就可以了