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

C# 来自DLL的WinForm上的事件处理按钮,c#,winforms,dll,delegates,eventhandler,C#,Winforms,Dll,Delegates,Eventhandler,我编写了一个C#实用程序类(DLL),由windows应用程序调用。在windows应用程序中,我设置了一个backgrounderWorker,以允许耗时的代码不占用windows应用程序。耗时的代码位于实用程序类DLL中。现在,我在windows应用程序上设置了两个按钮:“提交”按钮(在实用程序类中调用耗时的代码)和“取消”按钮 如果单击“取消”,我希望“取消”按钮停止backgroundWorker代码。问题是“取消”按钮在windows应用程序中,代码在DLL中。那么,有没有一种方法可以

我编写了一个C#实用程序类(DLL),由windows应用程序调用。在windows应用程序中,我设置了一个backgrounderWorker,以允许耗时的代码不占用windows应用程序。耗时的代码位于实用程序类DLL中。现在,我在windows应用程序上设置了两个按钮:“提交”按钮(在实用程序类中调用耗时的代码)和“取消”按钮

如果单击“取消”,我希望“取消”按钮停止backgroundWorker代码。问题是“取消”按钮在windows应用程序中,代码在DLL中。那么,有没有一种方法可以让我将“取消”按钮的“onClick”事件处理程序附加到DLL,然后让DLL定期检查按钮是否被按下

顺便说一句,取消按钮在DLL代码启动之前一直有效


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

是的,可以注册到项目之间的事件。您所要做的就是在dll中有一个winforms应用程序的引用,并将“取消”按钮公开。然后可以注册到dll代码中的任何事件然而,我不确定这是做你想做的事情的最佳方式。我认为更好的方法是在dll中使用一个名为Cancel的方法,并使用Cancel按钮单击事件调用此函数。通过这种方式,dll对winforms应用程序的依赖性降低。

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

  • 创建了一个公共类,并添加了一个eventHandler、我自己的自定义eventArgs和一个子类(eventWatcher)来承载事件(称之为onCancel)
  • 我注册了eventWatcher以侦听DLL中的OnCancel事件
  • 我将eventWatcher公开,以便在客户端应用程序中使用
  • 在客户端应用程序中,我执行了以下操作:

  • 我修改了cancel按钮以引发onCancel事件。这允许我在DLL中分配一个方法来处理DLL中耗时代码的优雅退出
    它现在可以正常工作了

    如果发布相关代码的提炼,您将得到更有针对性的建议。我做了类似的操作,但无法让“取消”按钮单击事件调用函数,因为耗时的过程仍将运行。对于DLL中的事件,我只需在耗时的过程中执行一些定期检查,如果引发事件,则相应地处理它。谢谢你的建议。