C#form程序 同一个程序打开多次互相之间传参怎么实现

C# form程序 想要实现 每次只打开一个实例
通过系统右键菜单打开第二个实例的时候把文件路径传给第一个打开的实例
并且执行第一个实例内的方法
然后关闭第二个实例
------------以上是需求-----------------
------------以下是废话-----------------
因为自己平时涉及到很轻量化的图片处理 想要随用随走
每次操作完点击关闭太麻烦
使用过光影魔术手和美图秀秀以及ps
成熟软件打开比较慢再加上菜单层级比较多
操作起来麻烦
现在已经实现逍遥的图片处理和通过右键菜单打开执行程序
但是同时选中几个文件就会打开几个实例
经常是一上午工作下来能打开二三十个实例
求帮忙

判断是否多开formload时候Process.GetProcessesByName获取程序名就行,判断是否已经>1就能能知道(程序名起特殊一些防止重名误判)。

至于参数共享,可以通过数据库,文件或者进程间通信都可以实现。非第一次打开将参数写入数据库,文件或者用消息发送给已经打开的进程。

第一次打开的进程用启动一个线程定时读数据库或者文件之类的。消息需要自己编写接收逻辑和发送逻辑(具体参考:

最简单的方式就是直接写记事本,每行一条

模型大概如下

   using System;
using System.Windows.Forms;
using System.Threading;
using System.Diagnostics;
using System.Text;
using System.IO;
namespace WindowsFormsApp1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        string sharefile = @"E:\xxx\xxx\xxx.txt";//
        DateTime modifytime; 
        private void Form1_Load(object sender, EventArgs e)
        {
            var pros = Process.GetProcessesByName("WindowsFormsApp1");
            if (pros.Length > 1)
            {
                MessageBox.Show("启动了多个实例");
                File.AppendAllText(sharefile, "\n" + "要写入文本的内容", Encoding.UTF8);
                this.Close();
            }
            else
            {
                if (File.Exists(sharefile)) {
                    modifytime = new FileInfo(sharefile).LastWriteTime;
                }
                else modifytime = DateTime.Now;
                var t = new Thread(() => {
                    while (true)
                    {
                        //读取代码,自己扩展,如判断文件修改时间和第一次进入程序的不一致时再读取之类的

                        Thread.CurrentThread.Join(1000);//1s读取一次
                    }

                });
            }

        }

        private void button1_Click(object sender, EventArgs e)
        {
        }
    }

}

有帮助麻烦点个采纳【本回答右上角】,谢谢~~有其他问题可以继续交流~

提供一个思路:增加一个全局变量,在类里加上对全局变量的get/set方法
再设一个全局变量,把第一个实例赋给这个全局变量(打开实例的时候检测一下全局变量是否为空)
打开第二个实例的时候,触发set,然后触发第一个实例的全局变量的get和需要执行的方法
不知道这样可不可以

1。使用进程间通信
2。在主线程重写消息模块,子进程使用委托往主进程抛消息及给子进程下发消息