WPF啟動流程-自己手寫Main函式

yiyecao發表於2020-09-27

WPF一般預設提供一個MainWindow窗體,並在App.Xaml中使用StartupUri標記啟動該窗體.以下通過手寫實現WPF的啟動.

首先先介紹一下VS預設提供的App.Xaml的結構,如下圖:

主要包括App.Xaml檔案以及App.Xaml.cs,以及App.g.i.s檔案(在obj->Debug中可以看見該檔案)

1.雙擊App.Xaml可以看見Xaml標記語言的資訊,其中StartupUri="MainWindow.xaml"表示啟動的窗體.

2.雙擊App.Xaml.cs看到的是繼承於Application的一個App類,該類是空的.並且是部分類.

3.雙擊App下的InitializeComponent 或Main()時會跳轉到App.g.i.s檔案,同樣InitializeComponent 或Main()也是在App的部分類中(同樣可以看見partial關鍵字. public partial class App : Application).

4.以上均屬於同一個類,即App.

5.右鍵專案選擇屬性,在啟動物件中可以看見是未設定,如果點選下拉框會看見以上那個app類.

以上說明了VS提供的預設的模板,現在自己寫程式碼實現WPF啟動,為了說明WPF啟動,首先建立一個專案,把以上檔案都都刪.

1.自己建立一個類,隨便命名(app.cs),並且類名也叫app

2.新增繼承,讓app繼承於Application,vs會自動提示新增system名稱空間.

3.在app類中新增Main方法,該方法必須是公共,靜態,無返回值.public static void Main(){}

4.在該方法上新增[STAThread]特性

5.在Main方法中,首先例項化該類,即:App app = new WpfApp1.App();

6.定義一個窗體,假設命名為win,這個窗體可以是該專案中的,也可以是引用專案的.有些公司有UI庫,其中UI庫中提供了自定義的Window,這時候就可以例項化一個自定義的Window.

7.app.run(win); 

8.還記得右鍵專案->屬性檢視啟動物件嗎? 正如你現在所想,啟動物件就可以選擇為剛才自定義好的app.

9.F5啟動,大功告成.

自己手寫Main函式的好處:

1.簡化了VS的模板,直接用程式碼啟動,更好理解WPF啟動流程.

2.如果使用自定義好的Window,則VS提供的模板沒有任何用,自己寫Main函式更清晰.

3.word等文件均可以實現雙擊開啟檔案,看起來挺帥.下面就自己實現這個帥動作.

3.1雙擊開啟檔案分為兩個步驟:

window檢測雙擊檔案的操作,並指向預設(設定好的程式)程式,然後把檔案路徑以命令列的形式傳給程式.

程式接收到該命令列,`獲取到檔案路徑,然後編寫程式碼解析檔案,並進行下一步操作.

3.2實現第一步,第一步主要是window系統的事,與程式無關.可參照一下連結.該註冊應該打包到軟體包中.安裝軟體時就會自動進行註冊.

https://blog.csdn.net/weixin_33834075/article/details/94325699 該註冊自行驗證.

後期也可以修改檔案與程式的關聯關係,參照以下連結:

https://jingyan.baidu.com/article/851fbc37d888553e1f15abb5.html

3.3第二步,程式部分的工作

app有一個事件Startup,在例項化app以後,給app新增Startup事件,app.Startup += App_Startup;;

private static void App_Startup(object sender, StartupEventArgs e)
{

}

該事件的StartupEventArgs 引數體用了傳入程式中的引數.e.Args是一個陣列,可以通過迴圈獲取.

3.4現在理論上可以實現了,但開發過程中怎麼測試呢? 為了測試進行註冊等也太麻煩了吧

其實VS已經為我們提供了命令列傳入的方式,右鍵專案->除錯 啟動選項中就可以看到命令列引數,在這裡寫上檔案路徑即可.如果想使用相對路徑,那就再定義一下工作目錄.

 

相關文章