实现异步登录
在实际开发系统中,用户登录的时候,我们需要等待几秒钟的时间来初始化一些数据,并且能够从窗体上感觉到后台的实际操作,我们可以使用以下的方法来实现,主要就是使用多线程。
// 使用多线程进行登录
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(); 开始一个多线程程序