【发布时间】:2017-10-10 02:24:32
【问题描述】:
所以我编写了一个完美运行的 C# (WindowsForm) 应用程序。但我希望能够从添加了 args 的命令行中使用它。
我的目标是说传递“9 4 3 5”的命令行参数执行一些代码并用数据填充变量,然后传递命令“运行试验”并让试验代码从变量中提取“9 4 3 5”命令行填充。
我将所有内容都标记为静态,但它仍然无法正常工作。我的假设是因为正在从命令行调用一个新的 .exe 进程并使用新的变量值等启动一个新进程。
如何保留旧进程,或让变量为所有进程保留值?
像内存映射文件这样的东西是我唯一的选择吗?我想我必须将数据写入磁盘,然后每次都获取它。
我还需要通过参数从命令行更改NotifyIcon 图标,所以我认为写入磁盘不会有帮助。是否可以将工作负载放入 DLL 帮助中,或者放入其自己的单独类中,然后从每个实例中访问它?
谢谢大家!
编辑:添加信息
感谢 lehiester 让我开始。
我现在有这个代码:
class AppBase : WindowsFormsApplicationBase
{
internal AppBase() : base()
{
this.IsSingleInstance = true;
this.MainForm = new TrayIcon();
}
}
static class Program
{
[STAThread]
static void Main()
{
Application.EnableVisualStyles();
//Application.SetCompatibleTextRenderingDefault(false);
//Application.Run(new TrayIcon());
AppBase mBase = new AppBase();
mBase.StartupNextInstance += MBase_StartupNextInstance;
mBase.Run(Environment.GetCommandLineArgs());
}
private static void MBase_StartupNextInstance(object sender, StartupNextInstanceEventArgs e)
{
if(e.CommandLine[1].Equals("toggle"))
{
TrayIcon.toggleIcon();
}
}
}
我目前的问题是它仍然显示第二个NotifyIcon,并在鼠标悬停时将其删除。我应该在哪里调用mBase.Run(Environment.GetCommandLineArgs());?
【问题讨论】: