C# panel无法正常显示
public partial class VPNMainForm : Form
{
public VPNMainForm()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
showLogin(loginPanel);
}
//点击登录按钮时触发登录操作
private void login_Click(object sender, EventArgs e)
{
string userName = userNameBox.Text;
string passWord = passWordBox.Text;
......
showLoginStatus(loginPanel);//加载登录状态panel,问题就出在这!不能在主form中显示这panel!而且发现程序在这个地方会卡几秒,窗口拖不动,这是不是我下面TryConnectVPN()调用了thread.sleep(5000)的原因?另外,当帐号和密码正确时它又会成功显示登录成功的panel,这是为什么?求解
vpn.TryConnectVPN();//这是调用构造函数,下同
if (true)
{
showLoginAlready(loginPanel);
}
else
{
showLogin(loginPanel);
resultPanel.Visible = true;
}
}
public void TryConnectVPN(string connVpnName, string connUserName, string connPassWord)
{
try
{
string args = string.Format("{0} {1} {2}", connVpnName, connUserName, connPassWord);
ProcessStartInfo myProcess = new ProcessStartInfo(VPNPROCESS, args);
myProcess.CreateNoWindow = true;
myProcess.UseShellExecute = false;
Process.Start(myProcess);
Thread.Sleep(5000);
}
catch (Exception Ex)
{
Debug.Assert(false, Ex.ToString());
}
}
//动态加载登录panel
private void showLogin(Panel p)
{
p.Controls.Clear();
p.Controls.Add(this.autoLoginCheckBox);
......
}
//加载登录状态panel
private void showLoginStatus(Panel p)
{
p.Controls.Clear();
p.Controls.Add(this.yanzheng);//这个是加载picturebox,里面有一张进度条gif图片
......
}
//加载成功登录提示panel
private void showLoginAlready(Panel p)
{
p.Controls.Clear();
p.Controls.Add(this.toMin);
......
}
}
求各位路过的大神帮帮忙~~
------解决方案--------------------thread.sleep(5000)
就是这句代码的原因
------解决方案--------------------界面停滞不动就是因为你线程休眠的原因。登陆状态可以考虑用模态窗体的方式来显示加载步骤吗?
------解决方案--------------------
肯定是thread.sleep(5000) 这个原因
你在主线程里面休眠自然会假死5秒,你可以另外开一个线程,委托给另一个线程休眠进行阻塞。
然后在这里调用那个线程。这样就行了。