查询数据库的数据,是个比较费时的工作,在使用线程查询的时候显示个进度条,并允许终止查询的实现

 

  public partial class FormThradQuery : Form
    {
        public delegate void PDelegate();

        public delegate void myDelegate(DataTable t);

        public delegate void myDelegatDoProcess();

        Thread tmyThrdGetdata;

        Thread tmyTrrdProcess;

        /// <summary>
        /// 数据获取结束标记 True 获取结束,False 未完全获取
        /// </summary>
        bool flagGetDataOver = false;

        /// <summary>
        /// 用户取消查询标记,True 取消 ,False 未取消
        /// </summary>
        bool flagCancel = false;

        private MMS.Public.DbAccLibry.DbAccess mydbacc;

        public FormThradQuery()
        {
            InitializeComponent();

            mydbacc = new MMS.Public.DbAccLibry.DbAccess();
            mydbacc.DatabaseInint(MMS.Public.DbAccLibry.DataBaseType.MsSqlServer, "Server=192.192.192.8;Database=escashsystem;User ID=sa;Password=Hy@ecSun.cn;Connect Timeout=20;Pooling=True;Min Pool Size=1;Max Pool Size=100;Persist Security Info=False;Asynchronous Processing=true;Integrated Security=false;");
        }

        /// <summary>
        /// 查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton1_Click(object sender, EventArgs e)
        {
            flagCancel  = false; flagGetDataOver  = false;

            try
            {
                tmyTrrdProcess = new Thread(new ThreadStart(ThreadProcess));               

                tmyThrdGetdata = new Thread(new ThreadStart(ThreadGetData));               

                tmyTrrdProcess.Start();
                tmyThrdGetdata.Start();

            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message.ToString() + ",数据查询失败", "查询提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
                return;
            }
        }

        private void FillData(DataTable dt)
        {
            this.dataGridView1.DataSource = dt.DefaultView;
        }

        void ThreadProcess()
        {           
            this.BeginInvoke(new myDelegatDoProcess(doProcess));           
        }
        private void doProcess()
        {
            this.toolStripProgressBar1.Value = 0;
            toolStripProgressBar1.Minimum = 0;
            toolStripProgressBar1.Maximum = 100;
            toolStripProgressBar1.Step = 10;
            while (toolStripProgressBar1.Value < 100)
            {
                if (flagCancel ) { break; }
                if (flagGetDataOver  == true) { toolStripProgressBar1.Value = 100; break; }
                if (toolStripProgressBar1.Value == 99)
                {
                    toolStripProgressBar1.Value = 0;
                }
                toolStripProgressBar1.Value++;
                Thread.Sleep(500);
                Application.DoEvents();
            }         
        }

        void ThreadGetData()
        {  
            this.BeginInvoke(new PDelegate(SetInfoBegin));//label 显示开始查询                                   

            //tsLabelInfo .BeginInvoke(new PDelegate(SetInfoBegin)); //label 显示开始查询                                   

            DataTable dt = mydbacc.ExecuteDataSet(CommandType.Text, "select * from ecv_spbaseinfo ").Tables[0];

            if (dataGridView1.IsHandleCreated)
            {
               this.dataGridView1.BeginInvoke(new myDelegate(FillData), new object[] { dt }); //填充查询结果
            }

            //tsLabelInfo.BeginInvoke(new PDelegate(SetInfoEnd)); //label 显示查询结束                                   
           
            this.BeginInvoke(new PDelegate(SetInfoEnd));//label 显示查询结束                                   
           
            flagGetDataOver  = true;
        }

        /// <summary>
        /// 开始查询提示
        /// </summary>
        private void SetInfoBegin()
        {
            this.tsLabelInfo.Text = "正在查询数据,请稍候。。。";
        }

        /// <summary>
        /// 查询完成提示
        /// </summary>
        private void SetInfoEnd()
        {
            this.tsLabelInfo.Text = "查询结束";
        }

        /// <summary>
        /// 查询终止提示
        /// </summary>
        private void SetInfoCancel()
        {
            this.tsLabelInfo.Text = "查询被终止。。。";
        }

        /// <summary>
        /// 终止查询
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void toolStripButton2_Click(object sender, EventArgs e)
        {
            flagCancel  = true;
            tmyThrdGetdata.Abort();           
            tmyTrrdProcess.Abort();

            this.BeginInvoke(new PDelegate(SetInfoCancel));
        }

        private void toolStripButton3_Click(object sender, EventArgs e)
        {
            if (tmyThrdGetdata.IsAlive) { tmyThrdGetdata.Abort(); }
            if (tmyTrrdProcess.IsAlive) { tmyTrrdProcess.Abort(); }
            Close();
        }

    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值