当我点击主界面上的刷新按钮,然后就会延时大约半分钟来读取信息,但是在读取的时候,整个软件就像死了一样(其实没有),刷新还在继续,所以我想达到这样的效果:点击刷新按钮,就弹出一个进度条在不停的动,表示程序正在运行,并没有死,然后进度条在刷,与此同时,刷新过程还在继续,当刷新结束时,进度条消失,显示主界面。
  我之前询问过,可以通过多线程的方式来实现,但我是个新手,对多线程还不是很了解。还请大家指教呢。
这是我的程序。delegate void ShowProgressBar();private void Frm_Page_Load(object sender,EventArgs e)
{
progressBar1.Style=ProgressBarStyle.Marquee;
progressBar1.Visible=false;
}
private void ShowProgress()
{
   if (progressBar1.InvokeRequired)
       {
         ShowProgressBar MyDelegate=new ShowProgressBar(ShowProgress)
         this.BeginInvoke(MyDelegate,null);
       }
      else
       {
       progressBar1.Visible=true;
      }
}private void SelectDate()
{
     if (isNew)
{
       this.BeginInvoke(new ThreadStart(this.ShowProgress);
       Refursh();
}
}
private void Refursh() //刷新过程,可能很慢
{
....
}运行后,界面还是假死,等刷新完了进度条才显示。所以我想问一下该怎么解决。
不胜感激

解决方案 »

  1.   

    你直接在load事件里开一个线程,线程里头调托管函数,不会出现卡死现象的
      

  2.   

    [Quote=引用 1 楼 zl194 的回复:]
    用个类似进度条的gif就行。
    [/Quote
    关键是要显示啊,我开多线程就是为了显示
      

  3.   

    如果直接在Refursh()过程前使progressBar1.Visible=true
    还是不显示,只有等到Refursh()完了才显示
    大家有没有好的办法,关于多线程的
      

  4.   


    using System.Threading;delegate void ShowProgressBar();private void Frm_Page_Load(object sender,EventArgs e)
    {
    progressBar1.Style=ProgressBarStyle.Marquee;
    progressBar1.Visible=false;
    }
    private void ShowProgress()
    {
       if (progressBar1.InvokeRequired)
           {
             ShowProgressBar MyDelegate=new ShowProgressBar(ShowProgress)
             this.BeginInvoke(MyDelegate,null);
           }
          else
           {
           progressBar1.Visible=true;
          }
    }private void SelectDate()
    {
         if (isNew)
    {
         Thread s=new Thread(Refursh);
         s.Start();
         //Refursh();
    }
    }
    private void Refursh() //刷新过程,可能很慢
    {
         this.BeginInvoke(new ThreadStart(this.ShowProgress);
    ....
         //需要写一个HideProgress的方法。
    }
      

  5.   

    使用的时候会出现资源竞争,要lock一下当前线程。