代码之家  ›  专栏  ›  技术社区  ›  Padu Merloti

BackgroundWorker是AsyncOperationManager的好子项吗?

  •  1
  • Padu Merloti  · 技术社区  · 16 年前

    以下是我要解决的问题:

    我的类(可以由UI应用程序、Windows服务或其他任何应用程序托管)需要接收Windows消息。在这附近的某个地方,有人建议(和一些源代码)在单独的线程中创建一个Windows窗体,该线程将创建该窗体。每当我感兴趣的Windows消息在WndProc上接收到时,它都会使用context.post触发一个委托。

    我一直在努力使它工作,但没有成功。我不想在这条路上花更多的时间,在我尝试复制我必须在这里发布的问题寻求帮助之前,我想我会尝试使用BackgroundWorker来实现相同的解决方案。

    从我所做的测试来看,当我使用uis时,我希望它能很好地工作,但我的问题是:在不处理uis时,有没有什么建议不使用backgroundworker?

    编辑: 按照我的设想,每次我的“孩子”表单(在后台工作人员中运行的表单)收到消息时,我都会发出一个reportprogress。我唯一需要通过线程的是消息ID,所以从技术上讲,它应该足够了,对吗?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Community Mohan Dere    9 年前

    背景工人和窗户都是水和火。一个窗口需要一个STA线程和一个消息循环,这两者都不是由bgw提供的。检查我的答案 this thread 作为另一种选择。

        2
  •  1
  •   SwDevMan81    16 年前

    我想说,如果最多每5秒传递一次,那么您可以通过 ReportProgress 事件。

        3
  •  0
  •   Joel Etherton    16 年前

    BackgroundWorker对象是执行您希望执行的任务的一种很好的方法。但是,您可能会发现,在对事情进行编码时,简单的消息ID不再足够,但是backgroundWorker.reportProgress方法允许您传入状态对象。如果您编写了一个有效的状态对象代码,那么您就可以真正地将彻底的快照发送回父窗体,并将其报告回父窗体。