C# 如何跨流程使用相同的变量?
所以我写了一个C#(WindowsForm)应用程序,它运行得非常好。但是我希望能够在添加了args的命令行中使用它 我的目标是说,通过“9 4 3 5”的命令行参数执行一些代码并用数据填充变量,然后通过命令“run trial”并从“9 4 3 5”命令行填充的变量中提取试用代码 我把所有东西都标记为静态,但它仍然不工作。我的假设是,正在从命令行调用一个新的.exe进程,并使用新的变量值等启动一个新进程 如何保留旧流程,或者让变量保留所有流程的值 像内存映射文件这样的东西是我唯一的选择吗?我想我必须将数据写入磁盘,然后每次都提取数据 我还需要通过参数从命令行更改C# 如何跨流程使用相同的变量?,c#,winforms,C#,Winforms,所以我写了一个C#(WindowsForm)应用程序,它运行得非常好。但是我希望能够在添加了args的命令行中使用它 我的目标是说,通过“9 4 3 5”的命令行参数执行一些代码并用数据填充变量,然后通过命令“run trial”并从“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())代码>?您的假设是正确的——静态变量不起作用,因为它们属于流程(严格来说,实际上是AppDomain),并且新实例是在不同的流程中启动的。多个.NET程序不能共享一个静态变量,除非在非常特殊的情况下,它们托管在同一进程中,这在这种情况下可能是不可能的
通常,在进程之间传递数据的最简单方法通常是命名为管道,但Windows窗体特别支持将第二个实例的命令行参数传递给已经运行的实例。您可以使用WindowsFormsApplicationBase.StartupNextInstance
事件,如中所述。您的假设是正确的——静态变量不起作用,因为它们属于流程(严格地说,实际上是AppDomain),新实例在单独的流程中启动。多个.NET程序不能共享一个静态变量,除非在非常特殊的情况下,它们托管在同一进程中,这在这种情况下可能是不可能的
通常,在进程之间传递数据的最简单方法通常是命名为管道,但Windows窗体特别支持将第二个实例的命令行参数传递给已经运行的实例。您可以使用WindowsFormsApplicationBase.StartupNextInstance事件,如中所述。我当然建议保持简单。考虑将计算结果发射到标准外,然后将管道输送到第二个参数,如:
first-process 9 4 3 5 | second-process
我当然会建议保持简单。考虑将计算结果发射到标准外,然后将管道输送到第二个参数,如:
first-process 9 4 3 5 | second-process
还有呢?还有?这就是我要找的。。为我的问题添加了更多细节,感谢您让我走上正确的轨道@Lehiestri我通过“WindowsFormsApplicationBase”的启动方法找到了它这就是我要找的。。为我的问题添加了更多细节,感谢您让我走上了正确的轨道@Lehiestri我通过`WindowsFormsApplicationBase的启动
方法获得了它`