让两个exe交互

时间:2014-07-25 13:48:30

标签: c# singleton exe interaction

我创建了一个单例类,如下所示:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace EnergyManager
{
public class Singleton
{
    private static Singleton istanza;
    public static Services Service;
    private Singleton(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);
        if (args.Length == 0)
        {
            Services.BehaviourType ProgramBehavior = new Services.BehaviourType();
            ProgramBehavior = Services.BehaviourType.NationalProviderConsole;
            Service = Services.Instance(ProgramBehavior);
            Application.Run(Service.SelectedFormTabs);
        }
        else
        {
            Service.ModifyTerminal(Convert.ToInt32(args[0]), Convert.ToInt32(args[1]), Convert.ToInt32(args[2]));
        }

    }
    public static Singleton Instance(string[] args)
    {

        if (istanza == null)
        {
            istanza = new Singleton(args);
        }
        return istanza;

    }

}

}

我想要做的是,当args不为null时,它会收到类Services的当前状态,并继续处理该状态。

此类单例由Program.cs调用

     static void Main(string[] args=null) 
        {

            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            Singleton Sing = Singleton.Instance(args);
        }

这是切入点。支持exe被称为Test.exe。

问题是,工作情况如下: 我首先运行没有命令行参数的Test.exe,而不是在类singleton中创建实例Service。然后我再次使用一些命令行参数运行Test.exe。因此,当在Program.cs中调用Singleton.Instance(args)时,在类Singleton中它输入if的else条件,但是服务没有实例化。这是因为我运行的两个exe看不到彼此的状态。如何以这样的方式修改代码:当我第二次运行Test.exe时,它会获得我第一次运行的Test.exe的状态?

2 个答案:

答案 0 :(得分:0)

您可以使用内存映射文件。这就像将状态写入文件但使用虚拟内存并且可以由多个进程访问。见Memory Mapped Files (.Net)。您还可以查看此Example,为您提供有关如何操作的指南。

答案 1 :(得分:0)