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

时间:2015-10-22 15:19:29

标签: c# events dll delegates handler

我一直在寻找可能的解决方案,但似乎没有一个接近我真正需要的东西。我有一个窗体输出到类库(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);
}

有没有办法直接订阅该活动?或其他一些事件?

2 个答案:

答案 0 :(得分:1)

  1. 将修饰符textbox1设置为public

  2. 订阅TextChanged活动:

    myObj.Textbox1.TextChanged + = textbox1_TextChaned;

  3. 控制台应用程序中的以下代码适合我。我引用的是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));
        }
      }
    

答案 1 :(得分:1)

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

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

    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);
    }