日期:2014-05-17  浏览次数:21561 次

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秒,你可以另外开一个线程,委托给另一个线程休眠进行阻塞。
然后在这里调用那个线程。这样就行了。