iT邦幫忙

0

C# winform如何加上Loading 等待畫面 ?

Una 2020-08-03 14:21:223936 瀏覽

最近在寫winform,
功能主要是去資料庫,資料整理後並匯出檔案(.csv)。
在整理資料以及匯出檔案時,若資料量龐大,可能會需要等一下。
我想在等的時候,加上loading等待下載中之類的提示窗。
依照網路上的範例去試,都不成功。

程式大致流程
1.觸發查詢Button
2.開始loading畫面
3.(背景執行)資料庫查詢並返回資料
4.(背景執行)整理資料
5.(背景執行)產生csv檔
6.結束loading畫面
/images/emoticon/emoticon06.gif
這樣分為兩部分,loading和處理資料要同時處理,這樣不是同步嗎?!
想請問各位大大,我應該去朝哪個方向去查才對?
/images/emoticon/emoticon02.gif

2 個回答

1
打狗松鼠
iT邦新手 4 級 ‧ 2020-08-03 16:04:49
最佳解答

程式大致流程
1.觸發查詢Button
2.開始loading畫面
3.(背景執行)資料庫查詢並返回資料
4.(背景執行)整理資料
5.(背景執行)產生csv檔
6.結束loading畫面

Button.Click的事件委派及方法你應該有所涉略,這裡就不多提了
現在的問題是,你怎麼顯示出loading的等待畫面及背景執行查詢
等待畫面的顯示可以使用ProgressBar或者用等待動畫來處理
一般來說在UI設計上,讓使用者等待短時間的工作會使用等待動畫(現在大多數App在載入時會有轉圈圈動畫,就是屬於等待動畫的應用);而長時間的工作則會使用進度條(在C# WinForm,就是使用ProgressBar)讓使用者得知進度,端看你目前在背景執行查詢的消耗時間平均來說是長或是短來去設計等待畫面
若是使用ProgressBar讓使用者得知進度,則可以使用BackgroundWorker讓ProgressBar得知背景執行查詢的進度

這樣分為兩部分,loading和處理資料要同時處理,這樣不是同步嗎?!

事實上C#乃至其他語言對於這種多執行緒同步處理的語法糖,不知道為什麼都不約而同地翻譯成了「非同步」,但事實上非同步才是真正把工作切成同步處理的作法
當然,C#的非同步並不一定是真的切執行緒,這個後面再說了
但是你這邊的案例應更適合使用多執行緒,而不是使用async/await(因你需要確實掌握工作是否完成)

想請問各位大大,我應該去朝哪個方向去查才對?

非同步處理的話請查詢「C# async」或「C# 多執行緒」,兩個都能滿足你的要求。

0

我要發表回答

立即登入回答