当使用.net Mutex来确保单个实例时,可能是在启动第二个实例时更新第一个实例

时间:2018-06-17 02:38:07

标签: c# .net singleton mutex

我有一个winform应用程序。用于阻止创建多个实例的Mutex类。

static class Program
{

    public static string IDFromAnotherApp = "default";
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [STAThread]
    static void Main(string[] args)
    {
        Application.EnableVisualStyles();
        Application.SetCompatibleTextRenderingDefault(false);

        if (args.Length > 0)
            IDFromAnotherApp = args[0];

        bool successAquisition;
        Mutex programMutex = new Mutex(true,
            AppDomain.CurrentDomain.SetupInformation.ApplicationName,
            out successAquisition);

        if (successAquisition)
        {
            Application.Run(new Form1());
            programMutex.ReleaseMutex();
            GC.KeepAlive(programMutex);

        }
        else
        {
            IDFromAnotherApp = "another";
            MessageBox.Show("already open");

        } 

    }
}

Form1代码

    public partial class Form1 : Form
{

    public Form1()
    {
        InitializeComponent();
        DisplayId();   
    }

    public void DisplayId()
    {
        label1.Text = Program.IDFromAnotherApp;
    }
}

现在,当用户点击带有参数的APP时,Form1 label1控件将显示该值,但如果其他用户再次点击APP,弹出窗口将显示&#34;已打开&#34;

我想做得更好,而不是弹出窗口,当另一个用户点击带有参数的APP时,是否已经打开Form1更新其label1的文本?甚至可能吗?

1 个答案:

答案 0 :(得分:0)

您可以使用数字技术中的任何一种

  1. 了NamedPipes
  2. Windows消息
  3. Windows套接字
  4. WCF
  5. 更多......
  6. 我会建议使用NamedPipes或可能是Windows消息

    至于如何做到这一点,互联网上有很多例子,你可以很好地进行研究。如果您对任何特定技术有疑问,欢迎您就您遇到的问题的具体细节提出另一个问题