我有一個UWP應用程序,我在幾個地方添加了0。但是我發現了一個有趣的問題。那是當我將async
添加到OnBackRequested
事件的某些事件中時,我實際上會得到後退記住它被點擊了多少次。也就是說,第一次點擊它時,async OnBackRequested
會觸發一次,第二次點擊它,async OnBackRequested
會觸發兩次,等等。我想知道如果這是一個操作系統錯誤或其他任何東西。我該如何解決這個問題。謝謝!爲什麼在UWP中添加異步後會多次觸發BackRequested事件?
回答
我認爲你忘記刪除OnBackRequested處理程序。
當導航到新的頁面,我認爲你做:
OnBackRequested += .....
但是當你從它導航,你忘記調用OnBackRequested -= ......
它的作品,謝謝!我認爲GC爲我做了那些不是異步的工作,你覺得呢? – litaoshen
要解釋爲什麼BackRequested
正在發生兩次時,你讓你的處理程序異步:這是因爲您在設置Handled = true
之前正在執行異步操作。當你聲明一個方法爲async
,那麼當它執行一個await
時,該方法排隊一個任務並返回。待完成的事情完成後,排隊的任務運行,該任務恢復執行該方法(直至下一個await
)。
BackRequested
事件處理程序不知道您排隊的任務。它看到處理程序返回了,它會檢查您是否設置了Handled
,並且由於您尚未設置Handled = true
,它斷定處理程序不想處理BackRequested
事件,因此它會調用下一個處理程序。
所以你看到的是兩個問題的組合。
- 您在設置
Handled = true
之前執行了await
。 - 您有多個處理程序。
你仍然有一個問題:由於處理程序不執行其await
之前設置Handled = true
,在BackRequested
事件的結論是,你不處理該事件,並且它會嘗試處理該事件對您(可能通過導航到以前的應用程序)。
TL; DR:如果您要在BackRequested
事件中執行異步內容,請務必在第一次異步操作之前設置Handled = true
。
- 1. BackRequested在UWP應用程序中觸發不止一次
- 2. 爲什麼UIPanGestureRecognizer會多次觸發UIGestureRecognizerStateEnded?
- 3. 爲什麼bootstrap-select會多次觸發?
- 4. 異步事件被觸發
- 5. 爲什麼TriggerComplete事件不會觸發?
- 6. 爲什麼DropDownList.SelectedIndexChanged事件不會觸發?
- 7. 爲什麼ajax事件不會觸發?
- 8. 爲什麼Backbone.js中的第二次渲染之後事件不會觸發?
- 9. 爲什麼IContentEvents.LoadedContent事件爲頁面多次觸發?
- 10. 不知道爲什麼觸發事件觸發兩次
- 11. 爲什麼我的Socket.io事件觸發多次?
- 12. 爲什麼不在WPF中加載故事板事件不會觸發?
- 13. Outlook 2016 VSTO文件夾添加事件只會觸發一次
- 14. 在UpdatePanel中多次觸發pageLoad事件
- 15. jQuery觸發器事件觸發多次
- 16. 爲什麼Hibernate會觸發onFlushDirty兩次?
- 17. 爲什麼jQuery .load()會觸發兩次?
- 18. 事件觸發多次
- 19. EditingControlShowing事件觸發多次
- 20. ViewModel事件多次觸發
- 21. 爲什麼__doPostBack()不會觸發我的綁定加載事件?
- 22. 爲什麼在Javascript中設置的onclick事件不會觸發?
- 23. 爲什麼我的SelectedIndexChanged事件不會在Button_Click中觸發?
- 24. 請求完成後觸發Redux異步操作。爲什麼?
- 25. 在文檔中添加或刪除元素時會觸發什麼事件?
- 26. 爲什麼點擊事件在我的腳本中多次觸發?
- 27. 爲什麼IDataErrorInfo多次觸發?
- 28. C#webBrowser HTMLDoc.Click觸發多次,爲什麼?
- 29. 爲什麼在同一元素上的mouseDown事件觸發後,不會點擊事件觸發?
- 30. 爲什麼Symfony Guard在每次請求時觸發'security.interactive_login'事件?
看起來你不止一次地將你的事件附加到BackRequested ... – Gusman
因此,在添加'async'之前,它只能觸發一次? – Stamos
@Stamos我有幾個地方有後備,任何沒有異步的地方都會觸發一次,但異步的地方會被觸發多次。它實際上是由於未註銷造成的。我認爲unasync的作品,因爲GC – litaoshen