Как создать win-форму связи ipc в проекте - PullRequest
0 голосов
/ 23 ноября 2018
 public partial class Form1 : Form
 {
   private Process subProcess;
   Counter counter = new Counter();
   public Form1(string[] args)
    {
        InitializeComponent();

        if (args.Length == 0 || args[0].IndexOf("-subMonitor") == -1)
        {
            IpcServerChannel serverChannel = new IpcServerChannel("serverchannel");

            RemotingConfiguration.RegisterWellKnownServiceType(typeof(Counter), "counter", WellKnownObjectMode.Singleton);
            Console.WriteLine("This is call number " + counter.Count); 
            Console.WriteLine("This is call number " + counter.Count);
            Console.WriteLine("Listening on " + serverChannel.GetChannelUri());

            // MainProcess
            subProcess = new Process();

            subProcess.StartInfo.FileName = Assembly.GetExecutingAssembly().Location;
            subProcess.StartInfo.Arguments = "-subMonitor";
            subProcess.StartInfo.UseShellExecute = false;

            subProcess.Start();

            Button btn = new Button();
            btn.Size = new Size(100, 100);
            btn.Location = new Point(0, 0);
            this.Controls.Add(btn);
            btn.BringToFront();

            btn.MouseUp += new System.Windows.Forms.MouseEventHandler(btnMouseUp);
        }
        else
        {

            Button btn = new Button();
            btn.Size = new Size(100, 100);
            btn.Location = new Point(0, 0);
            this.Controls.Add(btn);
            btn.BringToFront();

            btn.MouseUp += new System.Windows.Forms.MouseEventHandler(btnMouseUp);
            // SubProcess
            //Console.WriteLine(args[0]);

            IpcClientChannel clientChannel = new IpcClientChannel();
            RemotingConfiguration.RegisterWellKnownClientType(typeof(Counter), "ipc://serverchannel/counter");

        }

    }

    private void btnMouseUp(object sender, MouseEventArgs e)
    {
        MessageBox.Show(counter.Count.ToString());
    }
}



public class Counter : MarshalByRefObject
{

    private static int count = 0;
    public int Count
    {
        get
        {
            return (count++);
        }
    }
}

Я хочу общаться с той же программой по ipc.Тот же самый подпроцесс открывается при выполнении процесса.

для тестирования, я создал ценный Counter, который является Singleton Object.Я хочу получить общий доступ к одноэлементному объекту с именем Count.но это не работает.

Я хочу результат .....

Если я нажму кнопку Main btn, этот результат будет 2,3,4,5 Если я нажму Subbtn, этот результат равен 6,7,8

, но этот результат равен ...

Если я нажму кнопку Main btn, этот результат будет равен 2,3,4,5.Я нажимаю кнопку Sub btn, это результат 0,1,2 ...

Это не объект Singleton.

Что с ним не так?

...