寄存器-ObjectEvent 看起来一目中的实例所需要的参数 InputObject.什么是语法的对象是静态(共享)的事件吗?

更新:正确的语法 TimeChanged:

$systemEvents = [Microsoft.Win32.SystemEvents]
$timeChanged = Register-ObjectEvent -InputObject $systemEvents
-EventName 'TimeChanged' -Action { Write-Host "Time changed" }

不幸的是,SystemEvents不会用信号通知 PowerShell ISE.这里有一个样品的使用对象的staic事件作品:

$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"}

找到任何静态的事件的类型可能有,可以使用得到成员与静电开关

[MyStaticNamespace.MyStaticClass] | get-member -static -membertype event

编辑: 我也注意到在试图访问[Microsoft。Win32.SystemEvents]的事件,我需要运行一个提高(在Vista及以上),以便于访问的信息。

其他提示

史蒂夫得到了正确答案,所以没有必要投票在此(表决,他的代替).我只是想发表一样段,人们可以用来玩弄的静态活动,这样你不必找一个BCL静态活动,很容易起火。:-)

$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
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top