我有一個強大的命名組件。ShowDialog無阻塞來電
這個問題之前已經被問過......但只是有點不同而且目的不同。
我有一個Form基類。當實現類在基類IsBusy
上設置屬性時。我想阻止與表單的所有交互(設置Enabled = false是不夠的 - 我也想阻止移動,調整大小,關閉等......並且我不希望我的控件在IsBusy == true
時看起來被禁用),並顯示前面的彈出式加載表單(帶有加載動畫的透明無邊框形式)。
在我的加載動畫表單上調用ShowDialog在阻止調用窗體上的交互方面做了竅門......但顯然我還希望調用表單代碼繼續執行。
現在我正在使用新的LoadingForm().show(),然後在我的調用窗體上處理WndProc,並且如果IsBusy == true
我禁止所有WndProc消息......但我不喜歡這種方法。它可以防止表單重新繪製,我不想要。
如果我知道所有不同類型的消息讓我們通過允許正確的重新繪製,我不會介意WndProc的方法,但我不知道。
所以,我的問題是:
有沒有更好的解決方案?
或
罐有人告訴什麼WndProc的消息我應該讓過?或者在哪裏可以找到詞彙表?
謝謝。
「顯然我還希望調用窗體線程繼續執行」 - 只是不做任何事情,它會。看起來你正在解決一個不存在的問題。 –
執行此操作的一種方法是啓動一個新的線程以運行該操作(而不是原始的UI線程),並且完成該線程關閉「忙碌」對話框(通過調用),以便消息泵將控制恢復爲原始形成。一個標準的封裝是使用BackgroundWorker。 –
你是對的,使用BackgroundWorder可以消除這個問題。但我想集中進行這種更改......並且我知道有些地方不使用BackgroundWorker,這會在這種更改後使這些地方無法正常工作。 – Jeff