关于Winfrom的异步登录

来源:互联网 发布:单片机元器件清单 编辑:程序博客网 时间:2024/04/30 04:35

    开门见山。最近遇到一个需求,一个winform程序,后台管理用的,有账号登录验证。在用户登录窗口点击登录按钮后,由于需要连接到远程服务器进行验证,因为网络问题有时候要等很长时间,这个时候用户就难受了,登陆界面一直在等待访问结果,所以经常性的一直卡在那里不动。好了,工作开始,着手解决这个问题。


    我们知道,在Web编程中这种情况是很常见的,最通用的就是使用AJAX去处理,效果很好。但是在CS中我们应该如何去做呢? 多线程。这是最容易想到的方法,我也是用这个方法去解决的。

    这里我使用了一个异步委托。利用BeginInvoke方法实现异步的调用。

    第一步 ,定义一个登录操作的委托

     delegate int LoginDelegate();

    第二步,写两个方法,LoginBegin和LoginEnd,顾名思义,前者是登录验证的方法,就是我们前面所说的执行时间可能较长的代码段,后者就是Begin方法执行完毕后做的事情

        /// <summary>
        /// 登录请求开始
        /// </summary>
        /// <returns></returns>
        int LoginBegin()
        {

                //这里写上你的登录方法

                return 1;//如果成功就返回个1
        }

        /// <summary>
        /// 登录请求结束
        /// </summary>
        /// <param name="result"></param>
        void LoginEnd(IAsyncResult result)
        {
            AsyncResult asyncResult = (AsyncResult)result;
            LoginDelegate login = (LoginDelegate)asyncResult.AsyncDelegate;
            int loginresult = login.EndInvoke(result);
            if(loginresult==1)

                 //成功了

             else

                //失败了
        }


看到这里大家也许有点疑惑,IAsyncResult是哪里来的?下面就来说它

第三步,在点击登录按钮后执行委托(new LoginDelegate(LoginBegin)).BeginInvoke(LoginEnd, null);

这里是通过异步委托去调用了Begin方法,并且在Begin之行结束后调用End方法,刚刚的IAsyncResult其实就是Begin方法返回的值。


好了,简单三步,你就可以完成一个用户体验翻倍的登录。




     


0 0
原创粉丝点击