程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> 關於.NET >> 讓WPF窗體程序支持命令行方式運行的三種方式

讓WPF窗體程序支持命令行方式運行的三種方式

編輯:關於.NET

有的時候,我們希望窗體程序也能接受命令行參數,以Console的方式運行。但是實現起來卻要一些小技巧才能做到。如果做一個WPF程序,在Window的Loaded事件裡寫這樣的語句:

Console.WriteLine("Hello word.");

然後從CMD運行之。會發現這個語句根本沒有輸出出來。如圖1所示。

圖1. 從命令行運行Wpf程序

對於這個問題有三個解決方案。三個方案各有優缺點,請酌情選擇。

1.使用more命令:這種方案不需要修改任何代碼,只要在從命令行運行時加個 “ | more”即可。如圖2 所示。

圖2. 使用more重定向輸出

2.更改程序的Output Type:在VS的菜單中找到Project -> [Project Name] Properties…,選擇Application選項卡。把其中的Output Type,從Windows Application更改成Console Application。後果是無論是不是從命令行運行,都有個Console窗口隨著主窗體一起出來。如圖3所示。

圖3. Output Type改成Console Application的效果

3.Windows API調用:通過調用kernel32.dll裡的AttachConsole,可以把WPF程序與一個Console相關聯。代碼如下。

ConsoleAttacher

1/**////////////////////////////////////////////////////////
2//         Console Attacher
3//          Version 1.0
4//        Powered by nankezhishi
5//        [email protected]
6/**////////////////////////////////////////////////////////
7
8using System.Runtime.InteropServices;
9
10namespace WpfConsole
11{
12  /**//// <summary>
13  ///
14  /// </summary>
15  public class ConsoleAttacher
16  {
17    private const int ATTACH_PARENT_PROCESS = -1;
18
19    /**//// <summary>
20    ///
21    /// </summary>
22    public static void AttachParentConsole()
23    {
24      AttachConsole(ATTACH_PARENT_PROCESS);
25    }
26
27    [DllImport("Kernel32.dll", EntryPoint = "AttachConsole", CharSet = CharSet.Unicode, SetLastError = true)]
28    public static extern void AttachConsole(int dwProcessId);
29  }
30}
31

然後在Loaded事件裡加上對這個函數的調用。

ConsoleAttacher.AttachParentConsole();

運行結果如圖4所示。

圖4. Attach Console

這裡是最後一個例子的代碼。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved