首页 > 解决方案 > 使用 BeginInvoke 触发的事件会引发异常,但如果使用 Invoke 触发则不会

问题描述

我有一个库(.NET Standard 2.0)和相应的(.NET Core 3.1 - WPF)测试项目。

在库中,我有一个类 ( Configurator),其中包含基于委托和事件的简单通知,具有以下签名:

public delegate void ConfiguratorStatusChanged(int newStatus);
public event ConfiguratorStatusChanged ConfigurationStatusChanged;

在测试项目调用代码中,我以这种方式对事件进行虚拟订阅:

Configurator.ConfiguratorStatusChanged += (newStatus) => { /*no code at all*/ };

然后,在库代码中,我应该能够以同步方式触发我的事件Invoke

ConfiguratorStatusChanged?.Invoke(_newStatus);

或以异步方式使用BeginInvoke

ConfiguratorStatusChanged?.BeginInvoke(_newStatus, null, null);

同步方式工作正常(实际上什么都不做),而异步方式引发System.PlatformNotSupportedException: 'Operation is not supported on this platform.' ; 我也希望异步方式可以正常工作(实际上什么都不做),但事实并非如此;我已将第二个 ( AsyncCallback callback) 和第三个 ( object @object) 参数设置为 null,因为我不需要对通知进行任何控制,只需将其触发到调用代码即可。

问题是:为什么异步方式有问题?

标签: c#asynchronousevents.net-core

解决方案


推荐阅读