如何在控件中使用事件进行相互通信

本文关键字:互通 通信 事件 控件 | 更新日期: 2023-09-27 18:22:46

这是一个关于编程技术的问题。想法是这样的:

  1. control A触发事件(正常)
  2. control A侦听(其他线程/控件的)事件

我想实施第二个。但以一种安全且最模块化的方式。因此,控件不能只知道是谁在触发事件。我认为有很多方法可以做到这一点。哪一个最好?假设一个窗体正在激发事件LoadImages,并希望侦听事件ImagesLoaded

  • 线程/控件调用control A的一个函数,并以这种方式通知它它们已经完成了(但它们知道control A及其方法)
  • control A订阅线程/控件的事件并知道它们何时被触发(知道所有事情的主线程必须通过事件订阅来连接它们)
  • control A启动一个调用阻塞函数的等待线程,并在函数结束时触发ImagesLoaded事件control A知道执行某些作业的线程/控件)
  • control A在传递callback函数作为参数时调用函数或引发事件(除了必须做什么之外,没有人知道任何事情)

哪一个模块化程度最高?还有更多的方法可以实现2吗?

如何在控件中使用事件进行相互通信

您提到的技术通常是通过异步调用和*callback*s来实现的,这些调用在异步调用完成时执行。话虽如此,BackgroundWorker似乎适合你的情况。您可以使用它的DoWork处理程序执行阻塞/长时间运行的作业,并将完成后要做的事情绑定到RunWorkerCompleted事件(尤其是更新UI)。