pb_elvisSherlock.Visible = true;
Application.DoEvents(); //let the app show the picturebox
Thread.Sleep(3000);
pb_elvisSherlock.Visible = false;
問題在於,在暫停GUI線程之前,不要給消息循環顯示圖片框的機會。 Application.DoEvents()
解決這個問題。
請注意,在GUI線程上使用Thread.Sleep
會使繪畫凍結(嘗試在Sleep
處於活動狀態時在應用程序上移動窗口)。
你應該做這樣的事情:
pb_elvisSherlock.Visible = true;
int counter = 0;
while (counter < 30)
{
Application.DoEvents();
Thread.Sleep(100);
++counter;
}
pb_elvisSherlock.Visible = false;
它仍然是一種黑客攻擊,但窗口將被重繪,因爲它應該作出迴應。
更新2
嘛。 DoEvents
似乎有點扯皮。 (感謝您的評論)。
如果PictureBox的是一種嘮叨屏幕做這樣的事情:
替代1
- 創建一個只包含圖片框(不使用邊界的新形式在那個表格上)。
- 添加一個計時器,以這種形式調用
Close
三秒後
- 呼叫「myNagForm.DoModal()」
這種解決方案可以防止你的用戶在你的「正常」的形式做任何事情,而nagform是可見。
替代2
- 例如創建一個後臺工作,在這裏看到:http://dotnetperls.com/backgroundworker
- 移動你的圖片框和之後執行的後臺工作方法的代碼。
不應認爲是`Thread.sleep代碼(3000);`?我相信`Thread.Sleep`的輸入以毫秒爲單位。 – Josh 2010-12-22 14:56:12
發生了變化,但停頓時間更長,但我的照片箱仍未出現。 – Rob 2010-12-22 14:58:35
你可能需要給你的照片一個繪畫的機會。在調用Thread.Sleep()之前,應該有一個Update()方法或類似的東西。由於這些原因,使用計時器可能會更好,所以其他一切都可以繼續工作。 – 2010-12-22 15:05:20