C#关于等待窗体(转)
c#.net 中如果想在主窗口A里点击打开新窗口B(因为要数据库操作,Bload需一小段时间)之前弹出带有滚动条等待子窗口C来提示用户没有死机,应该怎么做?我用多线程打开了c窗口,但是问题:1.C窗口会作为一个新窗口弹出,在任务栏上有显示,而不能作为A的子窗口弹出,我设置了mdiParent属性,但是会报错“交叉线程……”;2.等B窗口load完毕需要关闭C窗口,应怎么操作?请达人给予指导,谢谢!
问题补充:
1 , C_window.ShowInTaskbar=false;这样就不会再任务栏上显示
2 , B窗口载入完毕线程结束的时候执行关闭c窗口就可以啦.
我试了试可以在任务栏上不显示,但是我想让这个C窗口在A窗口的范围内显示,最好是正中间,但是C只能是以电脑屏幕为准来显示的,位置不太理想,请问有办法解决吗?
在B窗体的加载事件里启动C窗体,等B加载完后用一个变量通知C窗体关闭
private void B_Load(object sender, EventArgs e) { c = new C(); Thread t=new Thread(new ThreadStart(要干的活 如 display)); //处理线程 t.Start(); c.ShowDialog(); } public void display() { if (this.richTextBox1.InvokeRequired) { myDelegate mydele = new myDelegate(copyDoc); richTextBox1.Invoke(mydele); c.Stop = true; //处理线程中,用于与等待窗体线程通信的变量 } } public partial class C : Form { private bool IsStop ; private Thread t; public bool Stop { set { IsStop = value; } } public frmWaiting() { InitializeComponent(); } private void C_Load(object sender, EventArgs e) { IsStop = false; t = new Thread(new ThreadStart(closeThisForm)); //等待B窗体信息的线程 t.Start(); } private void closeThisForm() { while (!IsStop) //等待信号 { } if (this.InvokeRequired) { frmCloseHandler close = new frmCloseHandler(closeThisForm); this.Invoke(close); } else { this.Close(); } IsStop = false; }