我有Windows窗體。我已經把一個裝載圖像PictureBox
加載圖像停止問題
當我打開窗體,然後我設置
PictureBox1.Visible = false;
,而我的觸發按鈕我已經設置
PictureBox1.Visible = true;
的單擊事件,但在該事件中有是通過存儲過程從數據庫檢索數據的一些代碼。
當它跳轉到代碼從存儲過程檢索數據加載圖像停止加載。
它不應該發生。它應該顯示爲加載。我已經使用.gif加載圖像。
我該如何解決這個問題?
我有Windows窗體。我已經把一個裝載圖像PictureBox
加載圖像停止問題
當我打開窗體,然後我設置
PictureBox1.Visible = false;
,而我的觸發按鈕我已經設置
PictureBox1.Visible = true;
的單擊事件,但在該事件中有是通過存儲過程從數據庫檢索數據的一些代碼。
當它跳轉到代碼從存儲過程檢索數據加載圖像停止加載。
它不應該發生。它應該顯示爲加載。我已經使用.gif加載圖像。
我該如何解決這個問題?
每當你有一個事件處理程序中的長久叫你應該使用BackgroundWorker的! BackgroundWorker 可以運行代碼async,因此您的button_click eventHandler將在啓動worker後立即結束。
// add a BackGroundWorker bwLoadData to your form
private void YOURBUTTON_Click(object sender, EventArgs e)
{
PictureBox1.Visible = true;
bwLoadData.RunWorkerAsync();
}
private void bwLoadData_DoWork(object sender, DoWorkEventArgs e)
{
// access your db, execute storedProcedue and store result to
e.Result = YOUR_DATASET_RECORDS_OR_ANYTHING_ELSE;
}
private void bwLoadData_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if (e.Result != null)
{
// e.g. show data on form
} else {
// e.g. error message
}
}
可能的原因可能是通過加載圖像和數據檢索共享相同的線程。因此,您可以嘗試使用多線程或異步調用來獲取數據。對不起以前關於ajax/javascipt web worker的回答,我完全忽略了你提到的windows窗體。
大多數情況下,當您運行存儲過程時,UI線程被阻止。您可以使用BackGroundWorker
以從數據庫中獲取數據,這會創建另一個線程並且不會阻止您的主線程。
或者您可以手動創建一個線程並使用它從數據庫檢索數據。 在Windows窗體中,作爲最佳實踐,最好使用另一個線程來運行外部系統調用,以避免阻塞UI線程。
這是Windows應用程序,我不能使用JavaScript或AJAX –
看看這個鏈接,它可能是有用的 - http://www.yoda.arachsys.com/csharp/threads/winforms.shtml –