如何在控件中使用事件进行相互通信
本文关键字:互通 通信 事件 控件 | 更新日期: 2023-09-27 18:22:46
这是一个关于编程技术的问题。想法是这样的:
control A
触发事件(正常)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)。