毕业论文开发语言企业开发JAVA技术.NET技术WEB开发Linux/Unix数据库技术Windows平台移动平台嵌入式论文范文英语论文
您现在的位置: 毕业论文 >> net技术 >> 正文

WINForm中使用异步委托卡死了

更新时间:2014-5-21:  来源:毕业论文

最近一直在学习线程相关的东西。在学习的过程中一边练习,看看线程的效果。

我在登陆界面的登录按钮中使用了异步委托,因为请求数据库服务是一个费时的过程,如果用单线程的话,在点登录后,界面就死掉了。因为要一直等待请求完毕,
代码如下:
 private void radbtnLogin_Click(object sender, EventArgs e)         {             //去掉用户名和密码的首尾空格,保证数据的准确性             string userName = txtUserId.Text.Trim().ToUpper();             string userPwd = txtUserPwd.Text.Trim().ToLower();             if (userName ==string.Empty && userPwd == string.Empty)             {                 return;             }               GetInfo d1 =UserLoginBLL.GetUserInfoBLL;//GetInfo是自定义委托             //异步获取用户登录信息             IAsyncResult ar = d1.BeginInvoke(userName , userPwd ,new AsyncCallback(ReturnInfo) , d1);        }


我在用异步委托之后,使用了委托回调来获取登录信息,并用一个bool值得属性来判断是否登录成功

       /// <summary>         /// 异步调用回调方法         /// </summary>         /// <param name="ar"></param>         private void ReturnInfo(IAsyncResult ar)         {             LoginUserList = new List<PDA_USER>();             GetInfo dd = (GetInfo)ar.AsyncState;  //GetInfo是自定义委托             LoginUserList= dd.EndInvoke(ar);               if (LoginUserList.Count != 0)             {                 //用来指示是否登录成功                 IsUserLogin = true;                 //使用异步委托调用控件                                   //用这个来跨线程访问UI界面                 MethodInvoker mi = new MethodInvoker(SetUIForm);                 BeginInvoke(mi);                               }             else            {                 MessageBox.Show("用户名和密码不匹配,请检查" , "提示" , MessageBoxButtons.OK , MessageBoxIcon.Error);             }           }           //跨线程访问UI界面方法         private void SetUIForm()         {             this.Close();//关闭登录界面,在这之后会有主界面显示出来         }


同样,在登录界面上有一个"取消"按钮,我想实现的功能是,当在点"登录"之后点击"取消"按钮放弃这次请求或者让登录界面不关闭,同时不弹出主界面,这个功能我不知道该怎么实现。

用进度条+异步操作组件BackGroundWorker来实现。

花点时间了解一下。

设为首页 | 联系站长 | 友情链接 | 网站地图 |

copyright©youerw.com 优尔论文网 严禁转载
如果本毕业论文网损害了您的利益或者侵犯了您的权利,请及时联系,我们一定会及时改正。