45 lines
2.0 KiB
Markdown
45 lines
2.0 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 Dispatcher.Invoke that include a
|
|
parameter of type @System.Action. When existing code is recompiled, compilers
|
|
may resolve calls to Dispatcher.Invoke methods that have a @System.Delegate
|
|
parameter as calls to Dispatcher.Invoke methods with an @System.Action
|
|
parameter. If a call to a Dispatcher.Invoke overload with a @System.Delegate
|
|
parameter is resolved as a call to a Dispatcher.Invoke overload with an
|
|
@System.Action parameter, the following differences in behavior may occur:
|
|
|
|
- If an exception occurs, the <xref:System.Windows.Threading.<xref:System.Windows.Threading.Dispatcher.UnhandledException>Filter> 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 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 -->
|