我在C#中的对象在通过webbrowser控件构造时会调用一些JavaScript。然后,JavaScript将成功或失败地回调我们的c#代码。我需要让C#对象的构造函数等到JavaScript在离开构造函数之前返回回调。我该怎么做呢?
基本上,我需要确保在创建对象时始终正确初始化。这取决于javascript回调,这至少是微不足道的。
答案 0 :(得分:0)
虽然你不能在构造函数中使用async/await
,但它仍然可以进行异步JavaScript调用并等待它们的完成,具体取决于你在JavaScript中实际执行的操作以及从JavaScript到C#的回调内部。这是通过组织嵌套的消息循环来完成的,这里是example taking this approach。请注意,这可能很危险,因为它可能导致代码重入。
尽管如此,您仍然可以重构您的代码,以便async/await
使用Stephen Cleary在his blog entry中描述的方法之一使用{{1}}。
答案 1 :(得分:-1)
而不是拥有异步构造函数(which is not possible with .NET, anyway(感谢Servy)(并且我认为任何其他允许的框架都不是一个理智的框架,如果这样的东西存在)),你应该: / p>
initialize()
方法(将其命名为类似的东西)。你可以在每个实例中都有一个标志,告诉你是否已经通过了后Javascript初始化,以及你的类中的一些逻辑,以便它的实例只能被认为处于有效的,准备好的,可用的状态之后初始化步骤。祝你好运,编码愉快:)。