2012年1月10日 星期二

WPF的Main去哪裡了?我怎麼取得執行參數?

由於WPF把main()藏了起來,包裝起來,在編譯過程才會產生,所以原本透過main(string[] args)來取得參數的方法變得無法使用了(或說我不知道該怎麼用),怎麼辦呢?可以透過以下的變通方式來用,雖然麻煩點,但是知道方法之後,也沒有多難。




首先,要在App.xaml.cs動手腳,增加以下程式碼,就可以取得




        // override 的目的是為了取得傳入的參數
        protected override void OnStartup( StartupEventArgs e )
        {
            public static String Args0;


            if ( e.Args != null && e.Args.Count( ) > 0 )
            {
                Args0 = e.Args[ 0 ].ToString( );
            }
            base.OnStartup( e );
        }  




然後在啟動的視窗(可以在App.xmal當中看到呼叫了哪個視窗,他就會是啟動視窗,比方如果是 StartupUri="WinProgress.xaml" 那WinProgress 就是啟動視窗 
在該視窗程式碼(.cs)當中就可以用App.Args0取得傳入的參數了。




那參數如果有兩個呢?很簡單,就這樣子做:




        // override 的目的是為了取得傳入的參數
        protected override void OnStartup( StartupEventArgs e )
        {
            public static String Args0;
            public static String Args1;
            if ( e.Args != null && e.Args.Count( ) > 1 )
            {
                Args0 = e.Args[ 0 ].ToString( );
                Args1 = e.Args[ 1 ].ToString( );
            }
            base.OnStartup( e );
        }  




反而比較要注意的是,如果你透過程式要呼叫上面那個程式,想把參數傳進去,要怎麼透過Process()來傳多個參數呢?,要用個小技巧,Process.Start( "Filename", "Arg1 Arg2" );在Start()這個函式的第二個參數,傳入的自串中間用空格隔開,就會變成兩個參數了XD

沒有留言:

張貼留言