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

Event-Handling buttons on WinForm from a DLL

我编写了一个 C# 实用程序 class (DLL),它被 windows 应用程序调用。在 windows 应用程序中,我设置了一个 backgrounderWorker 以允许耗时的代码不占用 windows 应用程序。耗时代码在实用程序 class DLL 中。现在,我在 windows 应用程序上设置了两个按钮,一个 'submit' 按钮 - 在实用程序中调用耗时的代码 class 和一个 'cancel' 按钮。

我希望 'cancel' 按钮在单击时停止 backgroundWorker 代码。问题是 'Cancel' 按钮在 windows 应用程序中,而代码在 DLL 中。那么有没有办法让我将 'cancel' 按钮的 'onClick' 事件处理程序附加到 DLL,然后让 DLL 定期检查按钮是否被按下?

顺便说一句,在 DLL 代码启动之前,取消按钮会起作用。

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

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

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

  1. 制作了一个 public class 并添加了一个事件处理程序、我自己的自定义 eventArgs 和一个 subclass (eventWatcher) 来托管事件(称之为 onCancel)
  2. 我注册了eventWatcher来监听DLL中的OnCancel事件。
  3. 我创建了 eventWatcher public,因此它可以在客户端应用程序中使用。

在客户端应用程序中,我执行了以下操作:

  1. 我修改了取消按钮以引发 onCancel 事件。这让我可以在DLL中分配一个方法来处理DLL中耗时代码的优雅退出。

现在可以正常使用了!