更新:
閱讀您的評論,並更緊密地閱讀你的問題,我想你可能會尋求利用異步事件處理。下面是一個例子,它監聽事件,直到超時,然後退出。這個例子假設你可以改變你的程序集來添加一個事件。
產生事件類:
namespace ClassLibrary1
{
public class Class1
{
public event EventHandler SomeEvent;
protected void OnSomeEvent(EventArgs e)
{
var someEvent = SomeEvent;
if (someEvent != null)
{
SomeEvent(this, e);
}
}
public void SomeMethod()
{
Task.Run(() =>
{
for (int i = 0; i < 3; i++)
{
Thread.Sleep(3000);
OnSomeEvent(EventArgs.Empty);
}
});
}
}
}
PowerShell的:
# Load up your .net assembly
add-type -path .\Class1.cs
$x = new-object ClassLibrary1.Class1
$sourceIdentifier = "SomeEvent"
# Register event
$eh = Register-ObjectEvent -SourceIdentifier $sourceIdentifier -InputObject $x -EventName SomeEvent
$x.SomeMethod()
while ($true)
{
Write-Host "Waiting for event..."
$event = Wait-Event -SourceIdentifier $sourceIdentifier -Timeout 10
if ($event -eq $null)
{
Write-Host "No event received for 10 seconds."
break
}
# Do processing here
Write-Host "Processing event..."
$event
# Remove event from queue
Remove-Event -SourceIdentifier $sourceIdentifier
}
Unregister-Event -SourceIdentifier $sourceIdentifier
Write-Host "Done processing events."
你是什麼實際問題?你是問如何實現這些或者哪些選項被認爲更好的信息? – masrtis 2013-05-08 18:50:20
感謝您的回覆:)我正在使用它來最大限度地減少資源消耗。而不是每分鐘檢查10000個標記值,檢查哪些內容已經更改,我可以訂閱事件處理程序,創建自己的腳本塊以便在事件發生時執行。這樣我就不會掃描我的10000個標籤,只要發生了一些變化,我就會被回覆。這是我對這個話題的理解,如果我錯了,我會很感激,如果你糾正我。再次感謝。 – 2013-05-09 08:02:07