winform C/S的程序  由于登陆要访问服务器 等待时间比较长 所以想实现一个等待的效果现在放了一个来回滚动的gif图片在登陆界面上 默认隐藏
但是点击登录按钮后  设置该图片visiable属性为true的话  并没有显示出来
只有登录失败时候该图才显示出来我想实现的效果是点击登录按钮后 该图片就显示出来 请问怎么实现

解决方案 »

  1.   

    楼主要使用一个pictureBox来装gif图吧,我刚刚试了一下,设置pictureBox的visiable可以实现楼主想要的效果
      

  2.   

    为什么要实现登入等待呢?你登入要加载很多东西很慢吗?还是你只想做这个效果?如果做效果的一个Timer、或者在用一个线程就可以了
      

  3.   

    增加一个timer        using System.Threading;        bool logining = false;
            private void button1_Click(object sender, EventArgs e)
            {    
                Thread th = new Thread(new ThreadStart(Login));
                pictureBox1.Visible = true;
                timer1.Interval = 100;
                th.Start();
                timer1.Enabled = true;
            }        void Login()
            {
                logining = true;
                //模仿登录时间耗时5秒钟
                  Thread.Sleep(5000);
                logining = false;
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                if (!logining)
                {
                    timer1.Enabled = false;
                    pictureBox1.Visible = false;
                }
            }
      

  4.   

    用Application.DoEvents(); 
    可以显示,但在连接服务器的时候,时间长的话会出现程序“未响应”我认人只有创建另外的线程就可以了。
      

  5.   

    的确是要用线程,因为timer加图片都会在登陆过程中出现假死的情况。
    比如:
    (现在放了一个来回滚动的gif图片在登陆界面上 默认隐藏 
    但是点击登录按钮后  设置该图片visiable属性为true的话  并没有显示出来 
    只有登录失败时候该图才显示出来)
    我的思路:创建一个无标题栏的窗体,窗体内只放一个等待滚动图片(你可以加一个Lable写上信息提示)在你登陆窗体里加入委托:
    delegate void HandleInterfaceUpdateDelegate();  //委托,此为重点
    HandleInterfaceUpdateDelegate interfaceUpdateHandle;在你登陆窗体的构造方法里实例化委托interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(StartPro); //实例化委托对象接下来加入代码:
    private void chang()
    {
          ProcessBarForm obj = new ProcessBarForm();//ProcessBarForm是你放置图片的窗体
          obj.ShowDialog();
    }Thread td;
    public void StartPro()
    {
          td= new Thread(chang);
          td.Start();
    }
    最后在你的登陆事件里第一行加入:
    this.Invoke(interfaceUpdateHandle);//用指定的参数列表执行指定的委托
    无论登陆成功失败都在登陆事件最后终止线程:Thread.Sleep(0);
    td.Join(1000);
    td.Abort();