如何在PowerShell中向.NET对象添加事件处理程序?

Aar*_*sen 5 powershell

我正在编写一个使用第三方库的PowerShell脚本.我正在使用的一个对象要求我添加一个事件处理程序. 事件委托如下所示:

public delegate void TSBPGPCreateOutputStreamEvent(object Sender, 
                                                   string Filename, 
                                                   System.DateTime TimeStamp, 
                                                   ref System.IO.Stream Stream, 
                                                   ref bool FreeOnExit)
Run Code Online (Sandbox Code Playgroud)

在PowerShell中,我试过这样做:

$reader.Add_OnCreateOutputStream( {
    param(
        $sender,
        $fileName,
        $timestamp,
        [ref]
        $stream,
        [ref]
        $freeOnExit
    )
    $stream = New-Object IO.MemoryStream
} )
Run Code Online (Sandbox Code Playgroud)

但我收到此错误消息:

 Cannot convert value "
    param(
        $sender,
        $fileName,
        $timestamp,
        [ref]
        $stream,
        [ref]
        $freeOnExit
    )
$stream = New-Object IO.MemoryStream
" to type "SBPGP.TSBPGPCreateOutputStreamEvent". 
Error: "The type 'System.IO.Stream&' may not be used as a type argument."
Run Code Online (Sandbox Code Playgroud)

订阅活动有更好的方法吗?为什么Stream类型不能用作类型参数?我究竟做错了什么?

Bas*_*ink 8

您应该使用Register-ObjectEvent cmdlet,使用以下命令查看您自己系统上的示例:

PS> Get-Help Register-ObjectEvent -full
Run Code Online (Sandbox Code Playgroud)