c# - 使用 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++ - 使用 Diehard:如何为 Diehard Test 格式化合适的输入?
- json - 将原始字符串响应从 API 转换为 JSON 格式
- sql - 如何将多个序列号范围插入 SQL 中的 1 列?
- spring - 在 docker 中使用 gradle 设置活动弹簧配置文件没有任何效果
- android - 为什么我在我的 Android 应用程序中使用的可绘制对象在用作按钮背景时具有错误的纵横比
- java - 具有休眠依赖项的 Jar 文件无法使用 jdk 9+(openjdk 12)执行
- python - 为存储在对象列中的日期时间选择 DataFrame 行
- c# - .net core 2.1 ocelot 网关返回 404
- c# - 使用 Array.BinarySearch 在文本框上返回字符串
- java - 为什么即使附加了这么多条件,它也会打印“NO”?