Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
My Mono does a hard crash when CKAN tries to ask the user whether to reinstall a changed mod after a refresh:
Cause
The update runs on a background thread, and then it uses
IUser
to do GUI stuff.Changes
Now
YesNoDialog.ShowYesNoDialog
does all its GUI operations on the GUI thread and uses aTaskCompetionSource
to propagate the result back to the background thread.I made the parent form a parameter because
Util.Invoke
wasn't reliably switching to the right thread in my testing when the first parameter was from the YesNo form. I think that parameter needs to be a UI object that's properly connected to the rest of the app. As a bonus, this means we can pass the parent form toShowDialog
.I also realized that the if you had a
ShowYesNoDialog
call with the custom button caption parameters followed by a call without them, the buttons would keep the custom captions from the first call, so they need to be reset each time.