code学习

C# - 通过构造函数的方法实现WinFrm程序开启时接收参数

通过构造函数的方法实现WinFrm程序开启时接收参数

在项目开发过程中,有时候我们需要获取程序开启时的参数,进而实现进一步的自动处理。

比如,我们通过运行(Win+R)执行如下命令:

C:\tmp\1.exe ps1 ps2 ps3...

我们希望获取程序1.exe的入口参数,即ps1 ps2 ps3 ...,进而根据不同的参数,对相关业务逻辑进行不同的自动处理,那么我们如何实现呢?

两步实现

接下来我们将通过如下两步来实现:

A、增加主窗体构造函数

public MainFrm()     {          InitializeComponent();     }     //-----------设置窗体的构造函数用于窗体入口传参-----------//     string[] args = null;     public MainFrm(string[] args)     {          InitializeComponent();          this.args = args;     }      

B、重写Main函数方法

static class Program         {             /// <summary>             /// 应用程序的主入口点。             /// </summary>             [STAThread]             //static void Main()             //{             //    Application.EnableVisualStyles();             //    Application.SetCompatibleTextRenderingDefault(false);             //    Application.Run(new MainFrm());             //}             //-----------在默认程序入库函数中新增参数-----------//              static void Main(string[] args)             {                 Application.EnableVisualStyles();                 Application.SetCompatibleTextRenderingDefault(false);                 if (args.Length == 0)                 {                     Application.Run(new MainFrm());                 }                 else                 {                     Application.Run(new MainFrm(args));                 }               }         }      

综上,Main函数作为程序的唯一入口,我们只需要通过对Main函数的入口参数进行判断,当用户启动程序时,如果包含了参数,那我们在创建MainFrm对象时,只需要将相应的字符参数数组放进去,MainFrm的构造函数会将字符数组中的数据接收到用户临时定义的字符数组中,便于后续的处理。

常见应用场景

A、程序调用程序

程序A调用程序B,B程序中包含对于入口参数相关的设置。

只需要在程序A中执行如下代码,程序B就会根据相关指令自动处理了。

System.Diagnostics.Process process = new System.Diagnostics.Process();     process.StartInfo.UseShellExecute = true;     process.StartInfo.FileName = @"C:\tmp\B.exe";     process.StartInfo.Arguments = "ps1 ps2 ps3";     process.Start();      

B、Task任务计划

这个不用多说,类似Oracle的jobs。 

友情提供Delphi版的,可参考:

Delphi - Windows自动计划任务与ParamStr详解

  作者:Jeremy.Wu

  出处:https://www.cnblogs.com/jeremywucnblog/

  本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。