多线程进度条问题,求帮忙
using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlServerCe;
using System.Threading;
namespace GGKJPDA
{
public partial class Formrxxz : Form
{
webcz wcz = new webcz();
int zdz = 0;
/// <summary>
/// 设置进度条值,显示提示信息的委托
/// </summary>
/// <param name="percent"></param>
/// <param name="msg"></param>
private delegate void ProPercentDelegate(int percent, string msg);
/// <summary>
/// 关闭窗口委托
/// </summary>
private delegate void CloseFormDelegate();
/// <summary>
/// 初始化线程
/// </summary>
Thread _initThread = null;
public Formrxxz()
{
InitializeComponent();
this.Load += new EventHandler(Formrxxz_Load);
}
string rwname = "";
DataTable ds;
int i = 0;
private void Formrxxz_Load(object sender, EventArgs e)
{
rwname = ((Formrw)this.Owner).rwmc;
webcz wcz = new webcz();
string sql = "select xmname,zcbm,zcmc,ggxh,ssdw,anzd,jszk,syzk,startrq,zrr from zcxt_pdmx where xmname='" + rwname + "'";
ds = wcz.GetDataTable(sql);
i = ds.Rows.Count;
this.progressBar1.Maximum = i+1;
_initThread = new Thread(new ThreadStart(zxrw));
_initThread.Start();
}
public void zxrw()
{
conn cn = new conn();
ProPercentDelegate prop = new ProPercentDelegate(SetPercent);
CloseFormDelegate closeForm = new CloseFormDelegate(CloseForm);
CE_RWMX cexx = new CE_RWMX();
cexx.deletesj();
//webcz wcz = new webcz();
//string sql = "select xmname,zcbm,zcmc,ggxh,ssdw,anzd,jszk,syzk,startrq,zrr from zcxt_pdmx where xmname='" + rwname + "'";
//DataTable ds = wcz.GetDataTable(sql);
//int i = ds.Rows.Count;
string sql = "";
for (int j = 0; j < i; j++)
{
sql = "insert into [RWMX] (rwname,pdbj,sm,zcbm,zcmc,ggxh,ssdw,anzd,jszk,syzk,tcrq,zzr) values ('" +
rwname + "','未核对','','" +
ds.Rows[j][1].ToString() + "','" +
ds.Rows[j][2].ToString() + "','" +
ds.Rows[j][3].ToString() + "','" +
ds.Rows[j][4].ToString() + "','" +
ds.Rows[j][5].ToString() + "','" +
ds.Rows[j][6].ToString() + "','" +
ds.Rows[j][7].ToString() + "','" +
ds.Rows[j][8].ToString() + "','" +
ds.Rows[j][9].ToString() + "')";
cn.update(sql);
this.Invoke(prop, new object[] { K, "正在下载请稍候..." });
if (j == i-1)
{
this.Invoke(closeForm);
}
}
}
private void CloseForm()
{
this.Close();
}
private void SetPercent(int per, string msg)
{
this.progressBar1.Value = per;
this.label1.Text = msg;
}
}
}
获取Datatable然后把数据插入到我的sqlce数据库里,利用双线程给进度条value.在运行的时候Datatable有501条数据循环中的i=501,执行完插入到sqlce里面是1002条数据,应该循环501次实际循环了1002次 进度条总是回退把j的数给退回去了,哪位大神帮看看怎么回事。(不用帮我重写代码,告诉我我这段代码问题出在哪里,怎么解决就行这个是PDA里面用的) --------------------编程问答-------------------- this.Invoke(prop, new object[] { K, "正在下载请稍候..." });
你哪里来的K,这里应该用j+1才对 --------------------编程问答-------------------- 帮你顶一个 --------------------编程问答-------------------- 不是K是j 那是我测试运行了多少次循环忘记改了 --------------------编程问答-------------------- 顶一下怒顶 --------------------编程问答-------------------- 鼠标对着函数Formrxxz_Load点右键,查找所有引用,检查该函数是否被加载了2次。 --------------------编程问答-------------------- 自己弄明白了。把更新数据哪里写委托里了。 --------------------编程问答-------------------- 帮你顶一个
补充:.NET技术 , C#