如何在两个项目之间创建事件?

时间:2017-12-16 10:52:23

标签: c# events

我创建了两个项目(Proj_1Proj_2),Proj_1包含Proj_1_Program.csProjectOneClass.csProj_2包含Proj_2_Program.cs ,我需要OnInformed触发Informed1Informed2这是我到目前为止的方式:

//Proj_1_Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CrossProjectEvent
{
    class Proj_1_Program
    {
        static void Main(string[] args)
        {
            ProjectOneClass obj1 = new ProjectOneClass();
            obj1.Inform += new EventHandler(Informed1);
            obj1.InformNow();
            Console.ReadLine();
        }

        private static void Informed1(object sender, EventArgs e)
        {
            Console.WriteLine("Informed1");
        }
    }
}

//ProjectOneClass.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace CrossProjectEvent
{
    public class ProjectOneClass
    {
        public event EventHandler Inform;

        public void InformNow()
        {
            OnInformed(new EventArgs());
        }

        private void OnInformed(EventArgs eventArgs) // I want this method both trigger Informed1 and Informed2
        {
            if (Inform != null)
            {
                Inform(this, eventArgs); 
            }
        }
    }
}



//Proj_2_Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CrossProjectEvent;

namespace Proj_2
{
    public class ProjectTwoClass
    {
        public ProjectOneClass obj_proj_1;

        public ProjectTwoClass()
        {
            obj_proj_1 = new ProjectOneClass();
            obj_proj_1.Inform += new EventHandler(Informed2);
        }

        private static void Informed2(object sender, EventArgs e)
        {
            Console.WriteLine("Informed2");
        }
    }

    class Project2
    {
        static void Main(string[] args)
        {
        }
    }

}

但似乎只有Informed1被触发,所以如何解决这个问题?谢谢!

1 个答案:

答案 0 :(得分:0)

这是需要进程间通信的典型问题。它有十亿种不同的技术和方法。

一种解决方案是使用命名管道(Sample)进行远程处理,但也可以使用TCP和NetSockets。这可能是最简单的解决方案之一。

如果要构建一个需要大量进程间通信的更大的应用程序,那么actor模型,特别是AKKA.NET库,值得一提。

但这些只是你拥有的一些选择。