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

时间:2013-07-16 05:51:21

标签: c# multithreading events notifications controls

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

  1. control A触发事件(正常)
  2. control A侦听事件(其他线程/控件)
  3. 我想实施第二个。但是以安全且最模块化的方式。所以控件必须不知道是谁发射了事件只是它被触发。我认为有很多方法可以做到这一点。哪一个是最好的 ?假设某个表单正在触发事件LoadImages,并希望收听事件ImagesLoaded

    • 线程/控件调用control A的函数并以这种方式通知它们已完成(但他们知道control A及其方法)
    • control A订阅线程/控件的事件并知道它们被解雇的时间(知道所有内容的主线程必须通过事件订阅连接它们)
    • control A启动一个调用阻塞函数的等待线程,并在函数完成时触发ImagesLoaded事件control A知道线程/控件是做什么的一些工作)
    • control A调用函数或触发事件,同时将callback函数作为参数传递(除了他们必须做的事情,没有人知道任何事情)
    • ......?

    哪一个给了我最大的模块性?还有更多方法可以实现2吗?

1 个答案:

答案 0 :(得分:0)

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