【发布时间】:2019-06-17 18:44:53
【问题描述】:
我有一个 Winforms 应用程序 (.Net Core 3.0),它需要使用为 .Net Core 2.1 创建的二进制程序集
二进制程序集通过反射加载。
一些对象从加载的程序集中实例化(也通过反射),WinForms 应用程序本地的一些依赖对象在实例化时传递到这些构造函数中。
当在 Winforms 应用程序中使用这些依赖对象时,一切都会按预期工作。有可以成功等待的异步方法。
但是,当“反射创建”对象调用了一个使用传入依赖对象的方法时,事情会按预期工作,直到调用 await 为止。
await 的结果成功(例如,调用 Cosmos Db,我可以在其中看到数据发生变化),但线程永远不会从 await 调用返回。然后表单主线程启动并继续前进。如果进行了几次调用,则主线程(和表单)将冻结。
这些依赖对象不与任何 Windows 窗体控件交互。
如果有人对为什么线程返回调用方法而不是等待有任何想法,我将永远感激不尽。
【问题讨论】:
-
请提供MCVE 来说明您的问题。
-
您是在调用堆栈上方的任何位置调用
Wait或Result吗? -
@StephenCleary - 不,很遗憾不是。被调用的方法是通过反射调用的,因为它传递的方法参数是基类型,而方法本身需要一个子类。
-
@JSteward - 这是一个相当复杂的设置,因此很难做到这一点。如果我有时间尝试,我会 - 我同意这会有所帮助。没有人喜欢没有代码的问题...
标签: c# .net winforms async-await