实现异步登录

在实际开发系统中,用户登录的时候,我们需要等待几秒钟的时间来初始化一些数据,并且能够从窗体上感觉到后台的实际操作,我们可以使用以下的方法来实现,主要就是使用多线程。

 

// 使用多线程进行登录

public partial class Login : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        public string message;  // 显示在窗体上的信息

 

        // 开始登录

        private void btnStart_Click(object sender, EventArgs e)
        {
            message = "start login on the system";
            SetStatus();

            
            backgroundWorker1.RunWorkerAsync();  // 使用了BackgroundWorker控件,是VS20005中才有的
        }

        // 后台的操作显示在窗体上

        private void SetStatus()
        {
            this.label1.Text = message;
        }

 

        //使用线程去更新label上的值
        public void UpdataThread()
        {
            try
            {
                //在对控件的调用方法进行调用时,或需要一个简单委托又不想自己定义时可以使用该委托。
                MethodInvoker mi = new MethodInvoker(this.SetStatus);
                this.BeginInvoke(mi);
            }
            catch (ThreadInterruptedException)
            {
                //针对具体问题定制异常抛出显示
            }
            finally
            {
                //做一些处理
            }
        }

        // BackgroundWorker开始执行

        private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
        {
            Thread.Sleep(1000);
            message = "check the username and password......";

            // 增加后台要处理的逻辑
            UpdataThread();

 

            Thread.Sleep(2000);
            message = "Check successful";
            UpdataThread();
        }

        // BackgroundWorker开始完成

        private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("OK");    
        }
    }

 

说明:BackgroundWorker 组件是已经封装好了的一个多线程组件,用此组件只需要三步即可实现多线程操作,具体步骤如下:

1、backgroundWorker1_DoWork 多线程执行的事件
2、backgroundWorker1_RunWorkerCompleted 多线程运行完成后调用的事件

3、backgroundWorker1.RunWorkerAsync();  开始一个多线程程序

posted @ 2008-08-06 16:37  谢杰  阅读(2768)  评论(0编辑  收藏  举报