代码之家  ›  专栏  ›  技术社区  ›  SwDevMan81

有没有一种方法可以在启动后将数据发送给后台工作人员?

  •  2
  • SwDevMan81  · 技术社区  · 16 年前

    我知道,当您第一次启动BackgroundWorker时,可以通过runworkerasync函数调用传递参数,但是在它已经启动之后,您可以传递它的数据吗?或者我需要创建自己的并发形式来处理从不同线程向它传递数据的操作?

    3 回复  |  直到 16 年前
        1
  •  3
  •   Reed Copsey    16 年前

    您需要添加一些同步,并为后台工作人员提供一个读取数据的位置。

    你不能(很容易)向后台工作人员发送数据。只需要一个工作人员可以查找数据的地方,并且只需将数据添加到流程中就可以轻松得多。只要确保在这一点上进行同步,因为(至少)两个线程可能同时访问数据。

        2
  •  2
  •   JaredPar    16 年前

    BackgroundWorker API中不支持在任务启动后传递附加数据的机制。

    然而,工作程序只是在不同的线程上运行。您可以用在两个任意线程之间传递数据的方式将数据传递给该线程。关于如何…

    • 静态变量的状态变化(可能是邪恶的)
    • 对象的状态更改最初传递给工作程序(如果没有正确控制,仍然有点邪恶)

    您应该仔细考虑这些方法对同步的影响。

        3
  •  0
  •   Ed Power    16 年前

    我更喜欢使用后台线程定期检查新消息的静态队列。这允许后台线程以自己的速度工作。可以使用回调方法向主线程发出信号。和Reed说的一样,使用同步,比如静态对象来锁定。