Events 订阅对象的语法是什么;PowerShell中的静态事件?
在所需参数InputObject中查找对象实例。对象的静态(共享)事件的语法是什么 更新:以下内容的正确语法: 不幸的是,SystemEvents将不会在PowerShell ISE中发出信号。下面是一个使用对象staic事件的示例,该事件在任何地方都有效:Events 订阅对象的语法是什么;PowerShell中的静态事件?,events,powershell,powershell-2.0,Events,Powershell,Powershell 2.0,在所需参数InputObject中查找对象实例。对象的静态(共享)事件的语法是什么 更新:以下内容的正确语法: 不幸的是,SystemEvents将不会在PowerShell ISE中发出信号。下面是一个使用对象staic事件的示例,该事件在任何地方都有效: $networkInformation = [System.Net.NetworkInformation.NetworkChange]; $networkAddressChanged = Register-ObjectEvent -Inpu
$networkInformation = [System.Net.NetworkInformation.NetworkChange];
$networkAddressChanged = Register-ObjectEvent -InputObject $networkInformation
-EventName 'NetworkAddressChanged'
-Action { Write-Host "NetworkAddressChanged event signaled" }
如果将静态类型分配给变量,则可以订阅静态事件 例如:
$MyStaticType = [MyStaticNamespace.MyStaticClass]
Register-ObjectEvent -InputObject $MyStaticType -EventName MyStaticEvent -Action {Write-Host "Caught a static event"}
要查找类型可能具有的任何静态事件,可以使用Get Member和-static开关
[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event
编辑:
我在尝试访问[Microsoft.Win32.SystemEvents]事件时注意到,我需要在提升的提示符下运行(在Vista和更高版本上)才能访问消息。史蒂文得到了正确的答案,因此无需对此投票(改为投票)。我只是想发布一个示例片段,大家可以使用它来处理静态事件,这样就不必找到易于触发的BCL静态事件。:-)
PowerShell中正在运行一个消息循环,但您需要以管理员身份运行才能访问它。谢谢。我冒昧地借用了我问题中的大部分片段。
[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event
$src = @'
using System;
namespace Utils {
public static class StaticEventTest
{
public static event EventHandler Fired;
public static void RaiseFired()
{
if (Fired != null)
{
Fired(typeof(StaticEventTest), EventArgs.Empty);
}
}
}}
'@
$srcId = 'Fired'
Add-Type -TypeDefinition $src
Unregister-Event -SourceIdentifier $srcId -ea 0
$id = Register-ObjectEvent ([Utils.StaticEventTest]) Fired `
-SourceIdentifier $srcId -Action {"The static event fired"}
[Utils.StaticEventTest]::RaiseFired()
while (!$id.HasMoreData) { Start-Sleep -Milliseconds 250 }
Receive-Job $id