Как осуществлять взаимодействие процессов с помощью удаленного объекта в c# - PullRequest
0 голосов
/ 08 мая 2020

Я хочу общаться между двумя процессами через IP C связь. Я сделал 2 проекта «A» и «B» с помощью winform.

Я хотел бы сделать, если я введу каждое число в текстовое поле «Процесс A» и нажму кнопку «Установить», чтобы отобразить дополнительные значения два числа, введенные в текстовое поле «Процесс B». Например, если я ввожу 1 и 2 в «Процесс A», а затем нажимаю кнопку «Установить», 3 дополнительные значения 1 и 2 будут показаны в «Процессе B».

Вот мой код:

[Процесс A]

private void Form1_Load(object sender, EventArgs e)
{
    ServerChannel = new IpcServerChannel("remote");
    ChannelServices.RegisterChannel(ServerChannel, false);
    RemotingConfiguration.RegisterWellKnownServiceType(typeof(RemoteObject.Object), "Cnt", WellKnownObjectMode.Singleton);
    ro = new RemoteObject.Object();
}

private void btnSet_Click(object sender, EventArgs e)
{
    try
    {
        ro.SetAValue(Convert.ToInt32(this.textBox2.Text.ToString()));
        ro.SetBValue(Convert.ToInt32(this.textBox3.Text.ToString()));
        this.textBox1.AppendText("A : " + ro.GetAValue() + ", B : " + ro.GetBValue() + Environment.NewLine);
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }
}

[Процесс B]

 private void Form1_Load(object sender, EventArgs e)
 {
     try
     {
         ClientChannel = new IpcClientChannel();
         ChannelServices.RegisterChannel(ClientChannel, false);
         RemotingConfiguration.RegisterWellKnownClientType(typeof(RemoteObject.Object), "ipc://remote/Cnt");
         ro = new RemoteObject.Object();

         //timer.Interval = 1000;
         //timer.Enabled = true;

         //timer.Tick += new EventHandler(timer_Tick);
        }
     catch (Exception ex)
     {

     }
 }

[RemoteObject]

public class Object : MarshalByRefObject
{
    private static int Number1;
    private static int Number2;

    public int GetAValue()
    {
        return (Number1);
    }

    public int GetBValue()
    {
        return (Number2);
    }
    public void SetAValue(int cnt)
    {
        Number1 = cnt;
    }

    public void SetBValue(int cnt)
    {
        Number2 = cnt;
    }

    public int Sum()
    {
        return (Number1 + Number2);
    }
}
...