【转】关于等待窗体
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;}
我剛整過一個這樣的
轉載于:https://www.cnblogs.com/huangfr/archive/2012/04/04/2431691.html
總結
- 上一篇: yii1.1分页不起作用怎么办
- 下一篇: POJ 2186