2012-08-07 80 views
0

我已閱讀此問題How to Create Form from within non gui thread C#但它沒有幫助我。從非GUI線程創建窗體

我有表的列表,其中有玩家的列表,每個球員都有他自己的表單(我把它分成player.cs和playerform.cs)

的問題是: 如果我讓表從表繼承(顯示錶格並可見= false,因此其未示出)然後我可以使一個Methodinvoker

//table.cs 
class Table : Form{ 

    var player = Players.First(); 
    this.Invoke(new MethodInvoker(player.ShowForm)); 

//player.cs 
void ShowForm() { 
    var form = new PlayerForm(); 
    form.show(); 
} 

這是工作,而沒有任何問題或副作用。但有點討厭,繼承Form的類,只是使用Invoke。 (我的桌子不需要一個窗體,所以我想解決這個問題)

如何使用invoke,如果我沒有窗體?

感謝

回答

2

我建議你嘗試創建非UI線程形式,除非你有一個非常令人信服的理由這樣做。這樣做會產生複雜性,通過使用其他更標準的方法可以避免這種複雜性。

例如,如果要在每個表單的後臺進行處理,則可以爲每個單獨的表單使用BackgroundWorker實例。

如果您有一個長期運行的過程(如您鏈接到的問題中指示的那樣),則該過程可以使用事件來請求通過標準UI線程顯示錶單。

+0

每個玩家的表格都只是55x50px,並顯示一些統計數據,我想作爲一個MVC很好地分開它。 – 2012-08-07 04:11:53

+0

您不需要在單獨的線程上運行每個表單以實現可靠的設計。對於使用WinForms的MVC的一種方法,請看http://www.codeproject.com/Articles/383153/The-Model-View-Controller-MVC-Pattern-with-Csharp – 2012-08-07 08:26:01