2017-07-15 157 views
-1

我想知道C#和Java中的GUI組件是如何在幕後工作的。對我來說,每個組件似乎都需要擁有自己的線程來監聽它。例如,如果您有Frame,ButtonA和ButtonB,是否有三個獨立的線程,然後在每個線程上進行監聽?就像在Frame上有一個Frame線程監聽,在ButtonA上監聽的ButtonA線程和在ButtonB上監聽的第三個線程一樣?他們怎麼能在同一時間被聽到呢?我也想知道在Visual Studio中使用GUI設計器是否是不好的做法。使用GUI設計工具是否不專業,我應該學習從頭開始編寫GUI?我應該知道如何在C#中編寫GUI代碼?我已經很熟悉Java的Swing了。C#和Java中的GUI組件是由每個單獨的線程運行嗎?

謝謝!

回答

2

我不知道C#,但AWT,Swing和JavaFX都是單線程的,因爲現在大多數GUI解決方案都是。 Swing中的主線程例如被稱爲事件調度線程,它的名字幾乎告訴你它做了什麼。它基本上從事件隊列中拉出並將它們分派給相應的偵聽器組件。例如。如果你點擊一個按鈕,操作系統將生成一個事件,該事件將在事件分派線程的隊列中被查詢。然後,事件調度線程將拉動事件,確定需要通知哪個組件(例如,通過檢查點擊的座標)並調用組件上的相應方法。

您可以在這裏擺找到有關線程的詳細信息:http://docs.oracle.com/javase/tutorial/uiswing/concurrency/

上述方法適用或多或少大多數GUI框架。

+0

謝謝你解釋:)。 – EggBender

相關問題