日期
備註2020.05.01
初稿2020.05.02
調整章節
2020.05.03
增加尾聲
常見的大型軟體,如word、excel、photoshop、visual studio等等,由於啟動時要載入很多模組,為了提高介面響應,都會在啟動時會先開啟乙個小視窗,等到主介面初始化完成之後再關閉。
就像下面這個樣子:
通常我們把這個顯示啟動進度的小介面稱為啟動螢幕
或者閃屏
,英文大概就叫splash
。
在軟體中整合啟動螢幕好處有二:
其一:通過適當的反饋可以提公升使用者體驗。
使用者雙擊某個程式後,通過啟動螢幕可以知道,程式開啟了,正在啟動中,需要耐心等待一會兒。
試想,如果使用者雙擊了乙個檔案,等待5秒鐘後還沒開啟,他的第一反應會不會以為剛剛沒點到,再去開啟一遍呢?其實程序已經啟動了,只是介面還沒載入出來,這樣的體驗是很糟糕的。
其二:彰顯品牌概念。
在程式啟動過程中顯示logo及程式名稱,可以彰顯軟體品牌以及定位。
啟動螢幕上的內容不是隨意設定的,一般都會突出顯示軟體的名稱和載入進度。
由於工作原因,我經手的專案中也會碰到這種場景。程式啟動時需要讀取資料庫,載入配置,還可能需要聯網校驗授權碼,這些操作都是相當耗時的。
下面以wpf專案為例,說明如何製作乙個自定義的閃屏介面。
這個布局是不是似曾相識?沒錯,介面布局就是借鑑了微軟的word2016。
什麼?你說這是抄襲?讀書人怎麼能用「抄襲」二字呢?這叫借鑑,借鑑。。。
xaml布局**如下。
foreground="white"
margin="0,30,0,0"/>
給這個splashwindow定義乙個實時顯示進度的方法,其實就是更新介面上的文字。
public
void
setmessage
(string message)
splashwindow splashwindow =
null
;thread t =
newthread((
)=>);
t.setapartmentstate
(apartmentstate.sta)
;// 設定單執行緒
t.start()
;
為了保證主線程往下執行時splashwindow已經初始化完畢,需要等待一下。
do
while
(splashwindow ==
null
);
只要呼叫setmessage
方法就可以實時更新進度。
splashwindow.dispatcher.
invoke
((action)((
)=> splashwindow.
setmessage
("初始化主程式..."))
);
等後台以及主視窗都載入完成再關閉這個splashwindow。
splashwindow.dispatcher.
invoke
((action)((
)=> splashwindow.
close()));
至此,我們便實現了乙個自定義的啟動螢幕。
protected
override
void
onstartup
(startupeventargs e));
t.setapartmentstate
(apartmentstate.sta)
;// 設定單執行緒
t.start()
;dowhile
(splash ==
null);
splash.dispatcher.
invoke
((action)((
)=> splash.
setmessage
("檢測執行環境..."))
);// 這邊可以執行一些校驗以及初始化操作
// 載入a模組
initmodulea()
; splash.dispatcher.
invoke
((action)((
)=> splash.
setmessage
("初始化a模組..."))
);// 載入b模組
initmoduleb()
; splash.dispatcher.
invoke
((action)((
)=> splash.
setmessage
("初始化b模組..."))
);mainwindow mainwindow =
newmainwindow()
; current.mainwindow = mainwindow;
mainwindow.
show()
;// 在sw的執行緒上關閉splashwindow
if(plash !=
null
)}
其實不然。
按照上面的**啟動後,大部分情況下主視窗都不會再最前方顯示,即不是活動視窗,除非設定topmost
為true
。一旦這麼做了,視窗將永遠置頂,對使用者體驗是相當不好的。
可能你又想說,等主視窗載入完了再把topmost改
為false
不就行了。
我也這麼嘗試過,經過多次試驗,還是有一定概率不會是活動視窗。
其實只需要在啟動完成後增加下面這行**,就能解決煩惱。
mainwindow.activate();
2023年5月1日星期 centos增加乙個使用者並給root許可權方法
開始 測試環境 centos 5.5 1 新增使用者,首先用adduser命令新增乙個普通使用者,命令如下 adduser tommy 新增乙個名為tommy的使用者 passwd tommy 修改密碼 changing password for user tommy.new unix passwo...
給乙個窗體增加快捷鍵
我們在使用乙個應用程式的時候,如果熟練運用一些快捷鍵的話,會大大增加效率,那麼使用swing程式設計該如何新增快捷鍵呢?下面就讓我們來實現他。首先來看一下可能遇到哪些問題。一般來講,快捷鍵一定是要被繫結到某乙個元件上面的,並且在這個元件擁有焦點的時候快捷鍵才有效。這就遇到問題了,並沒有哪乙個元件能夠...
C 給列舉型別增加乙個備註特性
備註特性 public class remarkattribute attribute public remarkattribute string remark 列舉擴充套件類 public static class enumextension object attributes fi.getcus...