我在我的一个页面的button的click事件里这么写的private oid button_click(object sender,EventArgs e)
{
progressBar1.Visible = true;
            timer1.Start();
            try
            {
                ItemKit.Common.Class.ImgUpload.UploadProductPic(ref m_UrlList, ProductData.tdProduct[0].ProductCode);//这里是做ftp空间文件上传,运行完这句要等待一段时间(和网络有关。)
                progressBar1.Value = 100;
            }
            catch (Exception ex)
            {
                MessageBox.Show("图片上传失败!原因:\n" + ex.Message);
            }
} private void timer1_Tick(object sender, EventArgs e)
        {
            if (progressBar1.Value < 100)
            {
                progressBar1.Value = progressBar1.Value + 1;
            }
            else
            {
                timer1.Stop();
            }
        }我运行的时候,进度条没有动,这个怎么弄哇,我记得timer应该相当于另开一个线程运行代码的呀

解决方案 »

  1.   

          private void button1_Click(object sender, EventArgs e)
            {
                progressBar1.Visible = true;
                progressBar1.Maximum = 100;
                progressBar1.Value = 0;            System.Threading.ThreadPool.QueueUserWorkItem(fun, null);            try
                {
                    ItemKit.Common.Class.ImgUpload.UploadProductPic(ref m_UrlList, ProductData.tdProduct[0].ProductCode);//这里是做ftp空间文件上传,运行完这句要等待一段时间(和网络有关。)
                    progressBar1.Value = 100;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("图片上传失败!原因:\n" + ex.Message);
                }
            }        private void fun(object obj)
            {
                while (true)
                {
                    if (progressBar1.Value >= progressBar1.Maximum)
                    {
                        break;
                    }
                    Invoke(new MethodInvoker(delegate
                    {
                        progressBar1.Value = progressBar1.Value + 1;
                    }));                System.Threading.Thread.Sleep(10);
                }
            }
      

  2.   

    是不是主线程.
    TIMER是不是启动了.
      

  3.   

    timer的Enabled属性设置位true没,如果没设置timer的事件是不触发的
      

  4.   


    你写的不行啊 ,在Invoke这里就没反应了
      

  5.   

    把你代码里的timer1.Start()和timer1.Stop()分别改成timer1.Enable=ture和time1.Enable=false;
      

  6.   

    我的确遇到过timer不触发的情况,在wpf里,原因不明。
      

  7.   

            
    测试过,有效果
    但我不知道ItemKit是什么,所以使用一个while(true)代替private bool m_bExit = false;        private void button1_Click(object sender, EventArgs e)
            {
                progressBar1.Visible = true;
                progressBar1.Maximum = 100;
                progressBar1.Value = 0;            System.Threading.ThreadPool.QueueUserWorkItem(fun, null);            try
                {
                    //这里使用死循环代替下面注释的代码
                    while (!m_bExit)
                    {
                        Application.DoEvents();
                    }
                    //ItemKit.Common.Class.ImgUpload.UploadProductPic(ref m_UrlList, ProductData.tdProduct[0].ProductCode);//这里是做ftp空间文件上传,运行完这句要等待一段时间(和网络有关。)
                    progressBar1.Value = 100;
                }
                catch (Exception ex)
                {
                    MessageBox.Show("图片上传失败!原因:\n" + ex.Message);
                }
            }        private void fun(object obj)
            {
                while (true)
                {
                    if (progressBar1.Value >= progressBar1.Maximum)
                    {
                        m_bExit=true;
                        break;
                    }
                    Invoke(new MethodInvoker(delegate
                    {
                        progressBar1.Value = progressBar1.Value + 1;
                    }));                System.Threading.Thread.Sleep(10);
                }
            }
      

  8.   

    因为System.Windows.Forms.Timer也是运行在主线程上的,会被阻塞的
    可以试试System.Timers.Timer
    或者
    System.Threading.Timer
      

  9.   

    搞错了,应该把ItemKit这行代码放到线程里
      

  10.   

    timer 是有一个属性设置执行间隔的。i打头的。 你试一下看好使不
    还有start()  和Enable=true 效果是一样的