WPF - 命令行

  • 简述

    命令行参数是一种机制,用户可以在 WPF 应用程序执行时将一组参数或值传递给它。这些参数对于从外部控制应用程序非常重要,例如,如果您想从命令提示符打开 Word 文档,则可以使用此命令“ C:\> start winword word1.docx ”,它将打开word1 .docx文件。
    命令行参数在 Startup 函数中处理。下面是一个简单的示例,它展示了如何将命令行参数传递给 WPF 应用程序。让我们创建一个名为WPFCommandLine的新 WPF 应用程序。
    • 将工具箱中的一个文本框拖到设计窗口中。
    • 在这个例子中,我们将一个 txt 文件路径作为命令行参数传递给我们的应用程序。
    • 程序将读取 txt 文件,然后将所有文本写入文本框。
    • 以下 XAML 代码创建一个文本框并使用一些属性对其进行初始化。
    
    <Window x:Class = "WPFCommandLine.MainWindow" 
       xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml" 
       xmlns:d = "http://schemas.microsoft.com/expression/blend/2008" 
       xmlns:mc = "http://schemas.openxmlformats.org/markup-compatibility/2006" 
       xmlns:local = "clr-namespace:WPFCommandLine" 
       mc:Ignorable = "d" Title = "MainWindow" Height = "350" Width = "525"> 
         
       <Grid> 
          <TextBox x:Name = "textBox" HorizontalMoognment = "Left"  
             Height = "180" Margin = "100" TextWrapping = "Wrap" 
             VerticalMoognment = "Top" Width = "300"/> 
       </Grid> 
         
    </Window>
    
    • 现在订阅 App.xaml 文件中的 Startup 事件,如下所示。
    
    <Application x:Class = "WPFCommandLine.App" 
       xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
       xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
       xmlns:local = "clr-namespace:WPFCommandLine" 
       StartupUri = "MainWindow.xaml" Startup = "app_Startup"> 
         
       <Application.Resources> 
              
       </Application.Resources>
         
    </Application> 
    
    • 下面给出的是 App.xaml.cs 中 app_Startup 事件的实现,它将获取命令行参数。
    
    using System.Windows;
      
    namespace WPFCommandLine { 
       /// <summary> 
          /// Interaction logic for App.xaml 
       /// </summary> 
         
       public partial class App : Application { 
          public static string[] Args;
              
          void app_Startup(object sender, StartupEventArgs e) { 
             // If no command line arguments were provided, don't process them 
             if (e.Args.Length == 0) return;
                   
             if (e.Args.Length > 0) { 
                Args = e.Args; 
             } 
          } 
       } 
    } 
    
    • 现在,在 MainWindow 类中,程序将打开 txt 文件并将所有文本写入文本框。
    • 如果发现一些错误,则程序将在文本框中显示错误消息。
    
    using System; 
    using System.IO; 
    using System.Windows;  
    namespace WPFCommandLine { 
       public partial class MainWindow : Window { 
         
          public MainWindow() { 
             InitializeComponent(); 
             String[] args = App.Args;
                   
             try {
                // Open the text file using a stream reader. 
                using (StreamReader sr = new StreamReader(args[0])) { 
                   // Read the stream to a string, and write  
                   // the string to the text box 
                   String line = sr.ReadToEnd(); 
                   textBox.AppendText(line.ToString()); 
                   textBox.AppendText("\n"); 
                } 
             } 
             catch (Exception e) { 
                textBox.AppendText("The file could not be read:"); 
                textBox.AppendText("\n"); 
                textBox.AppendText(e.Message); 
             } 
          } 
       } 
    }
    
    • 当上面的代码被编译和执行时,它会产生一个带有文本框的空白窗口,因为这个程序需要一个命令行参数。因此,Visual Studio 提供了一种使用命令行参数执行应用程序的简单方法。
    • 在解决方案资源管理器中右键单击您的 WPF 项目并选择属性,它将显示以下窗口。
    WPF 命令行
    • 选择调试选项并在命令行参数中写入文件路径。
    • 使用 Test.txt 创建一个 txt 文件,并在该文件中写入一些文本并将其保存在任何位置。在这种情况下,txt 文件保存在“ D:\ ”硬盘上。
    • 保存项目中的更改并立即编译并执行您的应用程序。您将在 TextBox 中看到程序从 Text.txt 文件中读取的文本。
    命令行输出
    现在让我们尝试将您机器上的文件名从Test.txt更改为Test1.txt并再次执行您的程序,然后您将在文本框中看到该错误消息。
    命令行的错误输出
    我们建议您执行上述代码并按照所有步骤成功执行您的应用程序。