当前位置:编程学习 > C#/ASP.NET >>

多线程进度条问题,求帮忙

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#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,