从另一个应用程序订阅 dll 中的事件

Subscribe to event in dll from another application

我一直在寻找可能的解决方案,但 none 似乎接近我的实际需要。我有一个 windows 表单输出到 class 库 (dll)。我将此 dll 引用到控制台应用程序中,然后在 dll 中启动 GUI。我希望能够订阅一个控制事件并在我的控制台应用程序中执行任何代码。 当我想直接从我的控制台应用程序读取或写入 dll 中的属性时,我没有问题。示例:

MyDll.MyClass myObj = new MyDll.MyClass();
myObj.Textbox1.Text = "Hello World!";

但是,我想在我的 dll 中订阅 TextChanged 事件并将新文本输出到我的控制台应用程序。大致如下:

public void textbox1_TextChaned(object sender, EventArgs e)
{
    Console.WriteLine(myObj.textbox1.Text);
}

有什么方法可以直接订阅那个活动吗?还是其他一些事件?

  1. textbox1的修饰符设为public

  2. 订阅TextChanged活动:

    myObj.Textbox1.TextChanged += textbox1_TextChaned;

控制台应用程序中的以下代码适用于我。我引用的是 Windows 表单应用程序而不是 DLL,但我认为应该没有太大区别:

 class Program
  {
    static WindowsFormsApplication1.Form1 frm;
    static void Main(string[] args)
    {
      frm = new WindowsFormsApplication1.Form1();
      frm.textBox1.TextChanged += textBox1_TextChanged;
      System.Windows.Forms.Application.Run(frm);

    }
    static void textBox1_TextChanged(object sender, EventArgs e)
    {
      Console.WriteLine((frm.textBox1.Text));
    }
  }

这不会直接回答您的问题,但它会以更简洁的方式解决您的问题,IMO。

  1. 在您的 DLL 中定义一个接口 (IEventProcessor)。
  2. 在您的控制台中 应用程序实现接口 (ConsoleEventProcessor)。
  3. 通过
  4. 形式的构造函数传递一个实例
  5. 从表单中的事件调用其方法。

在控制台应用程序中:

IEventProcessor processor = new ConsoleEventProcessor();    
MyDll.MyClass myObj = new MyDll.MyClass(processor);

然后在表格中:

IEventProcessor _processor;
// constructor
public MyClass(IEventProcessor processor)
{
   _processor = processor;
}

public void textbox1_TextChaned(object sender, EventArgs e)
{ 
    // pass whatever parameters you need to use in the method
    _processor.ProcessText1Changed(textbox1.Text);
}