我有一个用于我们的过程控制应用程序的dll程序集,我在 powershell 脚本中使用了load。
DLL包含我需要使用的委托类型,委托名称为:
"X.Y.Delegate"
我在该DLL中有另一种方法应该以这种方式调用:
Method( delegatetype CallbackMethod)
所以,我需要:
在我的"X.Y.Delegate"
类型的脚本中定义委托,例如$MyDelegate
定义一个回调方法,以便在触发流程事件时调用它“
注意:如果我的问题看起来很傻,我很抱歉,我是一名绝对的初学者。
答案 0 :(得分:1)
更新
在阅读您的评论并更仔细地阅读您的问题之后,我认为您可能希望利用异步事件处理。下面是一个侦听事件的示例,直到达到超时然后退出。此示例假定您可以更改程序集以添加事件。
生成事件的类:
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."