2013-01-02 85 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