winform C/S的程序 由于登陆要访问服务器 等待时间比较长 所以想实现一个等待的效果现在放了一个来回滚动的gif图片在登陆界面上 默认隐藏
但是点击登录按钮后 设置该图片visiable属性为true的话 并没有显示出来
只有登录失败时候该图才显示出来我想实现的效果是点击登录按钮后 该图片就显示出来 请问怎么实现
但是点击登录按钮后 设置该图片visiable属性为true的话 并没有显示出来
只有登录失败时候该图才显示出来我想实现的效果是点击登录按钮后 该图片就显示出来 请问怎么实现
private void button1_Click(object sender, EventArgs e)
{
Thread th = new Thread(new ThreadStart(Login));
pictureBox1.Visible = true;
timer1.Interval = 100;
th.Start();
timer1.Enabled = true;
} void Login()
{
logining = true;
//模仿登录时间耗时5秒钟
Thread.Sleep(5000);
logining = false;
} private void timer1_Tick(object sender, EventArgs e)
{
if (!logining)
{
timer1.Enabled = false;
pictureBox1.Visible = false;
}
}
可以显示,但在连接服务器的时候,时间长的话会出现程序“未响应”我认人只有创建另外的线程就可以了。
比如:
(现在放了一个来回滚动的gif图片在登陆界面上 默认隐藏
但是点击登录按钮后 设置该图片visiable属性为true的话 并没有显示出来
只有登录失败时候该图才显示出来)
我的思路:创建一个无标题栏的窗体,窗体内只放一个等待滚动图片(你可以加一个Lable写上信息提示)在你登陆窗体里加入委托:
delegate void HandleInterfaceUpdateDelegate(); //委托,此为重点
HandleInterfaceUpdateDelegate interfaceUpdateHandle;在你登陆窗体的构造方法里实例化委托interfaceUpdateHandle = new HandleInterfaceUpdateDelegate(StartPro); //实例化委托对象接下来加入代码:
private void chang()
{
ProcessBarForm obj = new ProcessBarForm();//ProcessBarForm是你放置图片的窗体
obj.ShowDialog();
}Thread td;
public void StartPro()
{
td= new Thread(chang);
td.Start();
}
最后在你的登陆事件里第一行加入:
this.Invoke(interfaceUpdateHandle);//用指定的参数列表执行指定的委托
无论登陆成功失败都在登陆事件最后终止线程:Thread.Sleep(0);
td.Join(1000);
td.Abort();