dotnet/Documentation/compatibility/new-(ambiguous)-dispatcher_...

45 lines
2.1 KiB
Markdown

## New (ambiguous) Dispatcher.Invoke overloads could result in different behavior
### Scope
Minor
### Version Introduced
4.5
### Source Analyzer Status
Available
### Change Description
The .NET Framework 4.5 adds new overloads to <xref:System.Windows.Threading.Dispatcher.Invoke%2A?displayProperty=nameWithType> that include a
parameter of type <xref:System.Action>. When existing code is recompiled, compilers
may resolve calls to Dispatcher.Invoke methods that have a <xref:System.Delegate>
parameter as calls to Dispatcher.Invoke methods with an <xref:System.Action>
parameter. If a call to a Dispatcher.Invoke overload with a <xref:System.Delegate>
parameter is resolved as a call to a Dispatcher.Invoke overload with an
<xref:System.Action> parameter, the following differences in behavior may occur:
- If an exception occurs, the <xref:System.Windows.Threading.Dispatcher.UnhandledExceptionFilter> and <xref:System.Windows.Threading.Dispatcher.UnhandledException> events are not raised. Instead, exceptions are handled by the <xref:System.Threading.Tasks.TaskScheduler.UnobservedTaskException?displayProperty=name> event.
- Calls to some members, such as <xref:System.Windows.Threading.DispatcherOperation.Result>, block until the operation has completed.
- [ ] Quirked
- [x] Build-time break
### Recommended Action
To avoid ambiguity (and potential differences in exception handling or blocking
behaviors), code calling Dispatcher.Invoke can pass an empty object[] as a
second parameter to the Invoke call to be sure of resolving to the .NET Framework 4.0
method overload.
### Affected APIs
* `M:System.Windows.Threading.Dispatcher.Invoke(System.Delegate,System.Object[])`
* `M:System.Windows.Threading.Dispatcher.Invoke(System.Delegate,System.TimeSpan,System.Object[])`
* `M:System.Windows.Threading.Dispatcher.Invoke(System.Delegate,System.TimeSpan,System.Windows.Threading.DispatcherPriority,System.Object[])`
* `M:System.Windows.Threading.Dispatcher.Invoke(System.Delegate,System.Windows.Threading.DispatcherPriority,System.Object[])`
### Category
Windows Workflow Foundation (WF)
<!-- breaking change id: 23 -->