1、项目需求
当用户在登录界面选择了自动登录选项,下次启动程序时登录界面自动登录成功后打开软件主界面。
2、解决方案
当用户选中自动登录后点击登录按钮时把用户数据保存到本地,下次启动登录时从本地加载保存的用户数据。如果用户已经设置了自动登录则调用后台登录验证接口进行登录验证。验证成功后隐藏或关闭登录界面打开软件主界面。
3、具体实现
3.1、窗体初始化加载用户数据
private void FrmLogin_Load(object sender, EventArgs e)
{
SetImage();
SetResource();
SetControlStyle();
LoadUserData();
}
3.2、加载用户数据的方法
//加载用户登录数据
private void LoadUserData()
{
UserModel user = new UserModel();
loginModel = new LoginModel();
user = loginModel.GetAccountFromFile();
if (user!=null&& user.RemberPassword==1)
{
txtAccount.Text = user.Account;
txtPassword.Text = user.Password;
txtPassword.PasswordChar = '*';
chkPassword.Checked = true;
if (user.AutoLogin==1)
{
chkAutoLogin.Checked = true;
btnLogin.ForeColor = Color.White;
btnLogin.Text = "正在自动登录";
btnLogin.Enabled = false;
//采用异步调用,防止登录界面卡住,假死
Func<string, string,string[],bool> autoAuth = AuthenticateObject.Value.Authenticate;
autoAuth.BeginInvoke(loginModel.Account, loginModel.Password,null,AsyncAuthResult,autoAuth);
}
}
}
//异步回调函数
private void AsyncAuthResult(IAsyncResult result)
{
System.Threading.Thread.Sleep(3 * 1000);
bool authResult = false;
object obj = result.AsyncState;
Func<string, string, string[], bool> autoAuth = (Func<string, string, string[], bool>)result.AsyncState;
authResult = autoAuth.EndInvoke(result);
if (authResult)
{
_log.Info("登录成功");
this.Invoke(new EventHandler(FrmHide));
this.Invoke(new EventHandler(CreateMainView));
}
}
//隐藏登录界面
private void FrmHide(object sender,EventArgs e)
{
this.Hide();
}
//调用主窗体
private void CreateMainView(object sender, EventArgs e)
{
FrmLogin frm = sender as FrmLogin;
var main = frm.MainView.Value;
main.ShowView();
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34751.html