Fix UIA Invoke hang when ToolStripMenuItem opens modal dialog from MenuStrip - #14301
Fix UIA Invoke hang when ToolStripMenuItem opens modal dialog from MenuStrip#14301LeafShi1 wants to merge 2 commits into
Conversation
|
/azp run |
|
Azure Pipelines successfully started running 1 pipeline(s). |
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #14301 +/- ##
===================================================
+ Coverage 77.18395% 77.23985% +0.05590%
===================================================
Files 3279 3279
Lines 645138 645132 -6
Branches 47730 47730
===================================================
+ Hits 497943 498299 +356
+ Misses 143503 143126 -377
- Partials 3692 3707 +15
Flags with carried forward coverage won't be shown. Click here to find out more. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Pull request overview
This PR addresses a UI Automation (UIA) hang when InvokePattern.Invoke is used on a ToolStripMenuItem hosted by a MenuStrip whose click handler opens modal UI (e.g., ShowDialog). The fix changes the UIA invoke path to dispatch the default action asynchronously when the owning ToolStrip has a created handle, avoiding nested modal/message loops that can make the UIA client appear blocked.
Changes:
- Override
ToolStripMenuItemAccessibleObject.Invoke()toBeginInvoke(DoDefaultAction)when the owningToolStriphandle is created; otherwise fall back to synchronousDoDefaultAction(). - Re-enable and update the previously-skipped unit test scenario that opens a modal dialog from a MenuStrip item.
- Add a new unit test asserting the invoke behavior is asynchronous when the item has an owner with a handle.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated 1 comment.
| File | Description |
|---|---|
| src/System.Windows.Forms/System/Windows/Forms/Controls/ToolStrips/ToolStripMenuItem.ToolStripMenuItemAccessibleObject.cs | Implements asynchronous UIA invoke dispatch via BeginInvoke when hosted by a handle-created ToolStrip. |
| src/test/unit/System.Windows.Forms/System/Windows/Forms/AccessibleObjects/ToolStripMenuItem.ToolStripMenuItemAccessibleObjectTests.cs | Updates/regresses the test that previously hung and adds coverage for the new asynchronous behavior. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
Fixes #10244
Root Cause
ToolStripMenuItemAccessibleObject.Invoke, which previously calledDoDefaultAction()synchronously.Proposed changes
Customer Impact
Regression?
Risk
Screenshots
Before
Accessibility tools and UIA-based automation that invoke
ToolStripMenuItemitems which open dialogs from a MenuStrip will blocked,invokeswill fail to complete.BeforeChanges.mp4
After
Accessibility tools and UIA-based automation that invoke
ToolStripMenuItemitems which open dialogs from a MenuStrip will no longer hang or appear blocked, invokes will complete and dialogs will show reliably.AfterChanges.mp4
Test methodology
Test environment(s)
Microsoft Reviewers: Open in CodeFlow