2013-01-02 59 views
1

我想上哪个线程设计模式就下列概念,选择了一些建议:(我使用C#和Windows窗体) 哪种设计图案可供选择?

我有以下类:

  • Form类
  • Manage_Lists类
  • Worker类

场景:

  1. 用户可以在DGV的使用GUI(Form类)管理列表。

  2. 这些dgv的内容得到保存在 管理列表的相应列表中。我使用观察者模式用列表对象更新GUI。

  3. 与此同时,该Worker类使用列表的数据 Manage_Lists类履行自己的职责。这个责任包括一遍又一遍循环相同的过程。

  4. 使用Form类,用户可以启动/从工作停止工(工人被允许完成他的过程)

我需要我的工作线程使用thread.SetApartmentState(ApartmentState.STA);。我不能使用inbuild backgroundWorker,因为它使用TP并且因此是MTA。

我已经有一些想法,但由于我有点新,我想有一些专业意见。

在此先感谢!

+1

这是不是很清楚你问什么。你在哪些方面挣扎着?另外,如果你还没有开始实现这个,那么它可能属于程序员。 – Servy

+0

即使阅读了大量关于线程的教程,我仍然不知道实现这个概念的好方法是什么。所以我想要一些总的方向或模式来帮助我实现这一点。 – dylanmensaert

+0

就像我以前问过的那样,这个设计的哪个方面不知道如何实现?不要问怎么做整个事情。很明显,没有教程会详细探讨如何做*完全相同的事情。分解成碎片。弄清楚如何做那件事。如果您在这个较大的问题的某个方面遇到问题,在花费一些时间尝试解决问题之后,那么在此寻求帮助是适当的。事实上,这个问题是无法回答的。 – Servy

回答

1

仅供参考 - STA/MTA我相信只适用于COM公寓模型,而不适用于您的整个应用程序。您可以使用ThreadPool和STA应用程序。事实上,如果你使用所有.Net组件而不调用OLE对象或使用COM的其他东西,这可能根本就没有必要。 This question有很多讨论它的答案。

接下来,我将为UI使用ManualResetEvent来通知任何数量的工作线程是停止的时间。你可以做一些有害的事情,比如让每个线程注册自己并杀死任何按键发生时正在运行的线程,但是可能更好的方式是让它们在可能的时候干净地退出。如果工作者/观察者线程不经常监视事件,则这具有app出口的副作用,可能需要一些时间。

希望这会有所帮助。

+1

http://stackoverflow.com/questions/4685237/how-can-i-make-a-background-worker-thread-set-to-single-thread-apartment指出TP线程总是MTA。将阅读你发送的讨论,ty :) – dylanmensaert