簡體   English   中英

我可以在表單應用程序的while循環中查詢用戶交互事件嗎?

[英]Can I query for user interaction events within a while loop, in a form application?

在我的Windows窗體應用程序中,我有一個while循環,該循環不斷輪詢操縱桿設備以獲取值,並使用這些值連續更新GUI,然后刷新GUI。 但是,只要我處於while循環中,UI就不會響應任何交互。

在while循環中,是否可以查詢任何 GUI事件或交互(如按鈕單擊或按鍵)?

如果某些事件或交互發生在哪里,我希望能夠退出循環。 我至少希望關閉和最小化按鈕起作用。

因為我只需要輪詢操縱桿並每秒更新GUI 20次,所以大多數循環時間就是睡眠時間。 但是我想在這段時間里等待事件和互動。

您在使用游戲控制器嗎? 如果是這樣,您如何從中獲取輸入?

使用普通的Windows輸入(鼠標和鍵盤),您將調用覆蓋的OnXxx方法(或調用相應的事件)。

顯然,在不停止UI的情況下執行阻塞或長時間運行的操作的通常方法是在單獨的線程中運行該操作。 但是,這實際上取決於您如何從設備獲取輸入。

我已經比我預期的要簡單得多了。 基本上,在GUI應用程序中循環循環似乎不是一個好主意。 嘗試使用while循環從單獨的線程更新GUI將不起作用,或者這只是不好的編程習慣。

我沒有使用while循環在不確定的時間內連續調用一個函數,而是使用了一個計時器,該計時器觸發一個每隔50ms輪詢一次操縱桿的函數。 這意味着其余時間GUI可以自由更新自身。 我不需要強迫它刷新或查詢任何用戶交互。 因為這些功能僅運行很短,所以GUI有很多時間可以呼吸,因此不會錯過任何交互或事件。

總結起來,計時器驅動的函數調用可以替代while循環,並且可以避免GUI應用程序中的多線程噩夢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM