I'm writing a PowerShell script which uses a third-party library. One of the objects I'm using requires that I add an event handler. The event delegate looks like this:
public delegate void TSBPGPCreateOutputStreamEvent(object Sender,
string Filename,
System.DateTime TimeStamp,
ref System.IO.Stream Stream,
ref bool FreeOnExit)
In PowerShell, I tried doing this:
$reader.Add_OnCreateOutputStream( {
param(
$sender,
$fileName,
$timestamp,
[ref]
$stream,
[ref]
$freeOnExit
)
$stream = New-Object IO.MemoryStream
} )
But I get back this error message:
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."
Is there a better way of subscribing to events? Why can't the Stream type be used as a type argument? What am I doing wrong?
You should use the Register-ObjectEvent cmdlet, take a look at the examples on your own system by using:
PS> Get-Help Register-ObjectEvent -full
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()
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With