2013-10-29 22 views
1

我正在學習使用C#Win窗體中的多線程,並根據來源最好的方法來實現這是通過調用工作線程的主要方法。動態添加大量的控件形成另一個線程

現在這一切都很好,當必須完成繁重的處理,然後更新圖形用戶界面。

但是我有一個場景,我需要以編程方式在面板內添加大量控件。這可能會高達數千(面板將滾動)。因此,由於控件最終被主線程添加,程序仍然掛起,直到完成。

有沒有辦法解決這個問題?或者我應該嘗試使用其他控件,而不需要我同時實例化很多控件(因爲這顯然有點重)。

基本上這個面板包含一個列表和一個圖標(取決於狀態)。因此,我爲每個條目創建了一個標籤,我不知道它是否是理想的方式。

順便說一句,我來自網絡應用程序開發部門...有沒有類似於.NET中的div控制?我查看了一個富文本框,但它似乎沒有讓您以直接的方式添加圖像。

在此先感謝。

+2

我強烈建議所有.Net Windows應用程序開發的WPF而不是winforms。這是[更快](http://www.youtube.com/watch?v=D3Y6DnFpHCA)來處理大型列表,因爲它具有內置UI虛擬化,硬件加速和基於矢量的圖形。 winforms是一項非常古老的技術,不再關心任何人,不推薦用於任何新項目,只是爲了維護傳統應用程序。 –

+1

順便說一句,如果你來自網頁背景,那麼XAML + DataBinding方法對於你來說會比可怕的程序化太多代碼爲任何形式的winforms方法感覺更自然。 winforms不支持任何類型的自定義,並且在需要大量UI元素的情況下它執行得非常糟糕。 –

+0

不,沒有什麼像winforms中的'div'。 winforms實際上是GDI +的一個包裝,它是一種恐龍技術。它沒有被設計用於定製/現代/豐富的用戶界面開發,僅用於Windows 3.1類似的東西。你應該真的在使用WPF。 –

回答

0

你不應該有一個很好的理由來添加數百個控件,更不用說數千個了。這聽起來像你需要一個自定義控件,你需要添加項目。

ListBox或ListView控件可以用於基本項目,但是如果您需要大量的自定義功能,則必須自己重新發明輪子並手動繪製所有內容。如果你需要處理多重選擇,滾動,鍵盤快捷方式等等,這是很多工作。

這是使用WPF而不是Winforms的優點,因爲您可以輕鬆使用現有的ListBox邏輯並具有自由範圍來自定義外觀的項目,甚至他們如何安排。

WPF具有虛擬化面板的概念,即使有上千個項目,它也可以很好地運行,因爲它不會創建UI對象,直到項目被滾動到。