【问题标题】:How To Use Events In Controls For Mutual Communications?如何使用控件中的事件进行相互通信?
【发布时间】:2013-07-16 05:51:20
【问题描述】:

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

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

我想实现第二个。但是以一种安全且最模块化的方式。所以控件必须不知道谁在触发事件,只有它被触发了。我认为有很多方法可以做到这一点。哪一个是最好的 ?假设一个表单正在触发事件 LoadImages 并想要监听事件 ImagesLoaded

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

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

【问题讨论】:

    标签: c# multithreading events notifications controls


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-09
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2016-06-04
      相关资源
      最近更新 更多