c# winform 怎样弹出等待的窗口

mike088 2009-08-31 10:28:50
   
怎样点击按钮之后就给用户一个等待界面,frm.ShowDialog();就关闭那个等待的界面。?

private void btnAddFtpFile_Click(object sender, EventArgs e)
{

if (CheckPath() == false)//检测FTP是否可用,也要等。。。
{
MessageBox.Show(SetLanguage.getValues("frmExportFtp_ConntectionFailed", "frmExportFtp_Message"));

return;

}


frmFtpFileTree frm = new frmFtpFileTree(strip,strname,strpwd);

frm.ShowDialog();
// 点击按钮很久以后,这个frm才弹出来,我想在这个frm弹出来之前给用户一个等待的窗口。


//PicStatus.Visible = false;
this.txtFtpPath.Text = strpath.ToString();

}




public bool CheckPath()
{
string strip = txtFtpServer.Text.Trim().ToString();
string strname = txtFtpUserName.Text.Trim().ToString();
string strpwd = txtFtpPassword.Text.Trim().ToString();

FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strip));

req.Credentials = new NetworkCredential(strname, strpwd);

req.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;

req.KeepAlive = false;

try
{
req.GetResponse();//这里也比较慢。。。。
return true;
}
catch
{
return false;
}
}
...全文
1746 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
mike088 2009-08-31
  • 打赏
  • 举报
回复
===
mike088 2009-08-31
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 dancingbit 的回复:]
1.Form需要很长时间才能显示,基本上是Load事件中有过多的处理。
2.要在Form显示前显示另外一个Form,要么启动一个线程来处理,要么在前一个Form.ShowDialog之前,插入一个显示Form的调用,并定时若干时间后关闭。
[/Quote]

好深奥,有点代码吗?
dancingbit 2009-08-31
  • 打赏
  • 举报
回复
1.Form需要很长时间才能显示,基本上是Load事件中有过多的处理。
2.要在Form显示前显示另外一个Form,要么启动一个线程来处理,要么在前一个Form.ShowDialog之前,插入一个显示Form的调用,并定时若干时间后关闭。
liffe 2009-08-31
  • 打赏
  • 举报
回复
恩,用3楼的
BitCoffee 2009-08-31
  • 打赏
  • 举报
回复
就是因为CheckPath()方法执行连接比较慢,所以frmFtpFileTree才会很久才会弹出,出现假死的现象.

System.Threading.Thread th;

string strip = "";
string strname = "";
string strpwd = "";

bool blstr;

等待的无边框窗体 frm;

private void btnAddFtpFile_Click(object sender, EventArgs e)
{
strip = txtFtpServer.Text.Trim().ToString();
strname = txtFtpUserName.Text.Trim().ToString();
strpwd = txtFtpPassword.Text.Trim().ToString();

th = new System.Threading.Thread(new System.Threading.ThreadStart(CheckPath));
th.Start();

//这里可以打开一个等待的无边框窗体
frm = new 等待的无边框窗体();
frm.show();

timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
if(blstr != null)
{
timer1.Enabled = false;

//关闭已经打开的等待窗体
frm.close();

if(blstr == true)
{
frmFtpFileTree frm = new frmFtpFileTree(strip,strname,strpwd);
frm.ShowDialog();
this.txtFtpPath.Text = strpath.ToString();
}
else
{
MessageBox.Show(SetLanguage.getValues("frmExportFtp_ConntectionFailed", "frmExportFtp_Message"));
}
}
}

public void CheckPath()
{
blstr = null;
FtpWebRequest req = (FtpWebRequest)FtpWebRequest.Create(new Uri("ftp://" + strip));

req.Credentials = new NetworkCredential(strname, strpwd);

req.Method = WebRequestMethods.Ftp.PrintWorkingDirectory;

req.KeepAlive = false;

try
{
req.GetResponse();//这里也比较慢。。。。
blstr = true;
}
catch
{
blstr = true;
}
}
xxbd123 2009-08-31
  • 打赏
  • 举报
回复
等待界面好像是 load事件做的事情比较多的是很用吧

可以开一个线程来显示 load结束以后 结束这个线程

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧