我必须对.NET对象调用一个方法,该方法被定义为
IAsyncResult BeginListMetrics( ListMetricsRequest listMetricsRequest,AsyncCallback回调,对象状态)
是否可以使用powershell函数作为AsyncCallback委托?多么?
发布于 2013-06-07 01:10:27
通过如下转换,可以将Scriptblocks转换为大多数类型的委托。
$myCallback = [AsyncCallback]{
param( $asyncResult)
# callback code
if ($asyncResult.isCompleted) {
get-date
}
}发布于 2016-12-15 02:08:59
虽然@Xpw的答案是正确的,并且将Scriptblocks转换为委托通常是有用的,但对于AsyncCallback的具体情况,通常需要更多。
Oisin的PowerShell 2.0 -来自.NET的异步回调解释了这个问题,并提供了解决方案。充分发挥作用的例子是可用的。虽然Oisin清楚地说明了问题,但如果您不熟悉寄存器-对象,则很难理解他的解决方案。
有关详细信息,请参阅Oisin的精彩文章。简单地说,AsyncCallback是通过线程池调用的,因此无法运行ScriptBlock,因为线程没有PowerShell RunSpace。解决方法是嵌入一个小的C#类,该类接受AsyncCallback并引发一个事件,而Register-ObjectEvent用于在PowerShell中设置事件处理程序。
https://stackoverflow.com/questions/16281955
复制相似问题