问题描述是这样的:
我写了个程序叫APP,编译生成APP.exe
他是支持命令行启动的,start and load 是我定义的命令行选项
首先运行APP -start,启动一个APP实例 APP Instance1
然后再运行 APP -load 启动第2个实例 APP Instance2,它要做的事情是把前面的实例APP Instance1的一个成员类对象downcast成它的某个子类对象,然后APP Instance2就注销掉了以上就是需求,大家有什么好的办法,可以让一个进程的一个实例触发另外一个同名进程实例,使其去修改它的某些类对象or成员,要实时的请教,50分请教,关注即有分

解决方案 »

  1.   

    这样的需求不科学。APP的两个实例虽然是同一个名字,但他们是独立的两个进程。跨过进程边界去修改别人的数据,不符合编程的原则。你可以这样来做:APP的第二个进程,向第一个进程发出一个通知,由第一个进程自己把“APP Instance1的一个成员类对象downcast成它的某个子类对象”。
      

  2.   

    请问gomoku,
    怎么向第一个进程发通知啊,第一个进程又如何来写,才可以接受到通知捏?
      

  3.   

    in order to avoid this tip sink, to reply it again.
    Welcome discussion~
      

  4.   

    你在起另一个线程的时候new一个新的就可以了.
      

  5.   

    简单的跨进程通知,可以用“命名事件”来完成:using System;
    using System.Windows.Forms;
    using System.Threading;namespace WindowsApplication1
    {
        static class Program
        {
            [STAThread]
            static void Main(String[] argv)
            {
                //
                // 如果传入特定的参数,则打开命名事件,发通知后即刻退出
                //
                if (argv.Length > 0 && argv[0].ToUpper().Contains("-LOAD"))
                {
                    EventWaitHandle e = EventWaitHandle.OpenExisting("MyPopUpEvent");
                    if(e != null) e.Set();
                    return;
                }            Application.EnableVisualStyles();
                Application.SetCompatibleTextRenderingDefault(false);
                Application.Run(new Form1());
            }
        }
    }using System;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Threading;namespace WindowsApplication1
    {
        public partial class Form1 : Form
        {
            // 创建一个命名事件
            EventWaitHandle m_PopUpEvent = new EventWaitHandle(false, EventResetMode.AutoReset, "MyPopUpEvent");
            public Form1()
            {
                InitializeComponent();
                //
                // 分配一个线程用于侦听命名事件
                //
                ThreadPool.RegisterWaitForSingleObject(
                    m_PopUpEvent,
                    delegate { OnPopUpEventFired(); },
                    null,
                    -1,
                    false);
            }
            void OnPopUpEventFired()
            {
                // 每收到一次事件通知,改变窗口标题
                if (this.InvokeRequired) { this.Invoke(new MethodInvoker(OnPopUpEventFired)); }
                else { this.BackColor = Color.PeachPuff; this.Text = this.Text + " PoppedUp"; }
            }
        }
    }
      

  6.   

    我以前也碰到这样的问题,是用改写和读取文件的方法做的,这样实现比较简单些,但gomoku的方法也不错,关注一下!
      

  7.   

    命名管道,共享内存,remoting
      

  8.   

    gomoku
    EventWaitHandle能传递参数到另一个进程么? 
    怎么传呢?
      

  9.   


    gomoku 
    EventWaitHandle能传递参数到另一个进程么? 
    怎么传呢?
    不能。传递数据建议用hdt老大说的方法。也有用Socket或Windows消息的。你自己说的“检查文件”的方法也可以达到目的(虽然有些不足)。
      

  10.   

    用.net remoting, 缺点 : 端口会有冲突
    用WCF, 自己做service and client, 不 make sense
    用named event,good,但传参就要靠其他介质了,例如文件,数据库等,比较好
    socket,也可以,但服务器端要监听,有点小题大作了
      

  11.   

    好像要用到传说中的内存共享,.Net里的看看设计模式中的sington模式,也许有帮助
      

  12.   

    用.net remoting, 缺点 : 端口会有冲突 
    用WCF, 自己做service and client, 不 make sense 
    用named event,good,但传参就要靠其他介质了,例如文件,数据库等,比较好 
    socket,也可以,但服务器端要监听,有点小题大作了 good advice, when I look backward