我就是做登陆的时候,当点击确定,label显示“正在验证用户名密码....",然后程序判断是否正确,如果正确了,则label变成"验证成功",然后弹出主界面mainfrm。如果是错误,则label显示“验证失败.”
最开始我没有使用Timer控件  就是事件里面写。
 private void btn_Yes_Click(object sender, EventArgs e)
        {
            this.lb_Msg.Text = "正在验证....";
            timer1.Enabled = true;            Land(this.tb_Userid.Text.ToString(), tb_Pwd.Text.ToString());//验证用户名密码
        }  private void Land(string userid,string pwd)
        {
            if (IsExistUser(userid))
            {
                if (JudgePwd(userid, pwd))
                {
                    lb_Msg.Text = "验证成功。";
                    frm.Show();
                    this.Hide();
                }结果lable直接不显示郁闷啊。 后来我就加了个timer控件,用timer控件来调用验证的方法。"正在验证.."显示出来了。但是“验证成功”还是不显示。

解决方案 »

  1.   

    lb_Msg.Text = "验证成功。";
    Application.DoEvents();
      

  2.   

    为什么用Application.DoEvents(); 就可以了啊?我再else 如果验证失败里面也加了个  结果messagebox狂弹了N个出来。这是咋回事啊。给你看看代码。
                      else
                    {
                        lb_Msg.Text = "验证失败。";
                        Application.DoEvents(); 
                        if (MessageBox.Show("对不起,您的密码输入有误!", "密码错误", MessageBoxButtons.OK, MessageBoxIcon.Error) == DialogResult.OK)
                        {
                            this.tb_Pwd.Clear();
                            this.tb_Pwd.Focus();
                        }
                    }
      

  3.   

    public partial class FrmLogin : Form
        {
            public FrmLogin()
            {
                InitializeComponent();            this.timer1.Enabled = false;
                this.timer1.Interval = 1000;
            }        private void btnOK_Click(object sender, EventArgs e)
            {
                this.lblState.Text = "正在验证...";
                this.timer1.Enabled = true;
            }        private bool Validate()
            {
                if(this.txtLoginName.Text == "123")
                {
                    return true;
                }
                else
                {
                    return false;
                }
            }        private void timer1_Tick(object sender, EventArgs e)
            {
                this.timer1.Enabled = false;
                if (this.Validate())
                {
                    this.lblState.Text = "验证通过";
                }
                else
                {
                    this.lblState.Text = "验证失败";
                }
            }
        }
      

  4.   

    判断this.InvokeRequired 不行么?
      

  5.   

    这是判断是否是跨线程时候用的,如果你怕跨线程你直接用 System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer(InterVal)
      

  6.   

    现在可以了。但是有一点啊,特别慢。不就是验证登陆,然后show出我的主程序界面mainfrm吗?要等三四秒钟才show出来。我就奇怪了。大家看看我上面的代码有什么问题吗?还有怎么解决一下啊?是否需要用多线程呢???没用过多线程反正现在这样肯定不行,这速度太慢了。
      

  7.   


    这个当然设置了啊。主要是我在点了登陆验证成功之后,弄了一个渐渐加载界面的效果。在主界面又用了个timer。
    if (IsExistUser(userid))
                {
                    if (JudgePwd(userid, pwd))
                    {
                        frm.timer1.Interval = 1;
                        frm.timer1.Start(); 
                        frm.Show();
                        lb_Msg.Text = "验证成功。";
                        Application.DoEvents();
                        this.Hide();
                    }估计是这个问题。我走断点看了下,frm主界面show了之后,程序就在主界面的timer的事件中开始走了,然后渐渐加载界面的效果出来。怎么调整一下呢?是不是需要多线程?我不会用多线程?  现在这种情况太慢了。