IM軟件中怎么处理Login、Loading、Main窗体之间的加载
刚学WINFORM,最近在做一个IM软件练手,但是在登录时就出现了问题。以前写登录时,都是只有一个LoginForm和一个MainForm,我在Application.run(MainForm())以前就new LoginForm().showDialog(),然后判断返回值,或者在MainForm()的Load事件里加载LoginForm都能很好地解决。
现在的问题是我想在LoginForm里不连接数据库,只进行最基本的检查,把连接数据库的工作放到LoadingForm或MainForm中,我现在的做法是在Application.run(MainForm())之前new LoginForm().showDialog(),然后再在MainForm的Load事件里用showDialog()把LoadingForm显示出来,等连接数据库,判断登录和下载好友列表等完成以后再关闭LoadingForm,这样就可以使MainForm显示出来,现在的关键问题是我关闭LoadingForm的代码总是运行不到,LoadingForm一直显示。另外,也试过多线程自己没搞定。
[code=c#]
//啟動類
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
LoginForm loginForm = new LoginForm();
if (loginForm.ShowDialog() == DialogResult.OK)
{
Application.Run(new MainForm());
}
}
//MainForm的load事件中部分代碼,可以在这里连接数据库,也可以在LoadingForm里连接
private void MainForm_Load(object sender, EventArgs e)
{
loadingForm = new LoadingForm();
loadingForm.ShowDialog();
LoginInfoValue loginInfo = LoginInfo._loginInfo;
try
{
conn.Open();
string strSql = "select count(*) from LoginInfo where LEmail = '" + LoginInfo._loginInfo.lemail + "' and LPassWord = '" + LoginInfo._loginInfo.lpassword + "'";
SqlCommand com = new SqlCommand(strSql, conn);
int count = int.Parse(com.ExecuteScalar().ToString());
MessageBox.Show(count.ToString());//这句可以执行到
//loadingForm.CloseLoadingForm +=new LoadingForm.CloseForm(loadingForm_CloseLoadingForm);
loadingForm.Close();//测试用,这句执行不到,LoadingForm一直显示,有什么好的方法可以解决?
if (count > 0)
{
loadingForm.Close();
}
else
{
loadingForm.Close();
MessageBox.Show("用户名或密码错误!");
Application.Exit();
}
}
catch (Exception sqle)
{
MessageBox.Show(sqle.Message);
}
//後面代碼省略
}
[/code=c#]