給軟體增加乙個啟動螢幕來提公升啟動體驗

2021-10-05 16:25:55 字數 3218 閱讀 8853

日期

備註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

)}

其實不然。

按照上面的**啟動後,大部分情況下主視窗都不會再最前方顯示,即不是活動視窗,除非設定topmosttrue。一旦這麼做了,視窗將永遠置頂,對使用者體驗是相當不好的。

可能你又想說,等主視窗載入完了再把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...