WinForm上的事件处理按钮来自DLL

时间:2015-04-10 04:13:33

标签: c# winforms dll delegates eventhandler

我编写了一个C#实用程序类(DLL),它由Windows应用程序调用。在Windows应用程序中,我已经设置了一个后台工作器,以允许耗时的代码不占用Windows应用程序。耗时的代码位于实用程序类DLL中。现在,我在Windows应用程序上设置了两个按钮'提交'按钮 - 在实用程序类中调用耗时的代码并取消'按钮。

我想取消'取消'单击按钮以停止backgroundWorker代码。问题是“取消”'按钮位于Windows应用程序中,代码位于DLL中。那么有没有办法可以附上“取消”#39;按钮' onClick' eventHandler到DLL然后定期检查DLL是否按下了按钮?

顺便说一句,取消按钮一直有效,直到启动DLL代码。

我的想法是否正确还是有更好的方法?任何帮助,将不胜感激。

2 个答案:

答案 0 :(得分:0)

是的,可以注册项目之间的事件。你所要做的就是在你的dll中引用winforms应用程序,并公开取消按钮。然后你可以注册到dll代码中的任何事件。 然而,我不确定这是做你想做的最好的方法。我认为更好的方法是在dll中有一个名为Cancel的方法,并让取消按钮单击事件调用此函数。这样你的dll就不那么依赖你的winforms应用程序了。

答案 1 :(得分:0)

我实际上回过头来看了一些关于事件和事件处理的文档。我在DLL中执行了以下操作:

  1. 为公共类添加了一个eventHandler,我自己的自定义eventArgs和一个子类(eventWatcher)来托管一个事件(称之为onCancel)
  2. 我注册了eventWatcher来侦听DLL中的OnCancel事件。
  3. 我公开了eventWatcher,因此可以在客户端应用中使用它。
  4. 在客户端应用中,我执行了以下操作:

    1. 我修改了取消按钮以引发onCancel事件。这允许我在DLL中分配一个方法来处理DLL中耗时代码的正常退出。
    2. 现在按预期工作!