Maui
Maui copied to clipboard
SwipeView inside Popup crashes on Windows with System.AccessViolationException
Is there an existing issue for this?
- [X] I have searched the existing issues
Did you read the "Reporting a bug" section on Contributing file?
- [X] I have read the "Reporting a bug" section on Contributing file: https://github.com/CommunityToolkit/Maui/blob/main/CONTRIBUTING.md#reporting-a-bug
Current Behavior
On Windows, opening a Popup containing a SwipeView crashes with "System.AccessViolationException: 'Attempted to read or write protected memory. This is often an indication that other memory is corrupt.'"
The same code works on Android.
Expected Behavior
Should not crash on Windows.
Steps To Reproduce
- Build and run the repro app on Windows.
- Press the button to open the popup. The app crashes.
Link to public reproduction project repository
https://github.com/nshtinkov/SwipeView-BL-Crash
Environment
- .NET MAUI CommunityToolkit: 9.0.0
- OS: Windows 11 Build 10.0.22631
- .NET MAUI: 8.0.40
Anything else?
The crash happens in the call to FrameworkElement.Measure() on the SwipeView. It may be a bug in MAUI, but I am posting it here because it only happens in a Popup.
Could be related to https://github.com/dotnet/maui/issues/16735 ; the repro app is modified from that issue. However I can no longer reproduce the original issue.
@nshtinkov , Is the result you are expecting below?
https://github.com/user-attachments/assets/813c2dca-154f-4430-905d-f3801b7ec773
In my modified code, AccessViolationException is not occurring. I tried writing the modified code with reference to the PR below.
https://github.com/dotnet/maui/pull/6220
If the Popup size is not specified, the Popup size is measured using the Measure method, but this problem occurred at that time. In the PR above, the target SwipeControl determines whether it is the right time to call the Measure method and then calls the Measure method.
If SwipeControl is included in the popup's Content hierarchy, you need to call the Measure method when it can be called, and avoid calling the Measure method when it is not possible.
By the way, SwipeControl's Measure method can be called when SwipeControl's IsLoaded property is true.
If you can confirm the expected result, you can create a PR, but if the Popup's content includes SwipeControl, you will have to perform your own processing, and it is doubtful whether this will be accepted as a modification to the Popup.
@nshtinkov , Is the result you are expecting below?
Yes this is it. Thank you for the detailed explanation.
If you look here SwipeView suppport for Windows has been removed and is maked Not Planned by the Maui team. https://github.com/dotnet/maui/issues/6152
Resolved in https://github.com/CommunityToolkit/Maui/pull/1581