7

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

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

在 PowerShell 中,我尝试这样做:

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

但我收到此错误消息:

 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."

有没有更好的订阅事件的方法?为什么不能将 Stream 类型用作类型参数?我究竟做错了什么?

4

2 回答 2

9

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

PS> Get-Help Register-ObjectEvent -full
于 2012-09-13T13:13:24.003 回答
3
Add-Type -AssemblyName System.Windows.Forms
[reflection.assembly]::loadwithpartialname("System.Drawing") | Out-Null
$form = New-Object Windows.Forms.Form
$form.add_mousedown($handler_form_mousedown)
$handler_form_Mousedown=
{
param([object]$sender, [System.EventArgs]$e)
write-host $e.x
write-host $e.y
$sender.text="if ya think your so noble answer the question"
$sender.text = "Nobles Oblige"
# PS HELP IS USELESS FOR THIS    
}

$App = $form.ShowDialog()
于 2013-09-05T01:45:09.987 回答