Powershell调用程序集委托
我有一个用于进程控制应用程序的dll程序集,我在我的powershell脚本中使用load DLL包含我需要使用的委托类型,委托名称为:Powershell调用程序集委托,powershell,dll,delegates,Powershell,Dll,Delegates,我有一个用于进程控制应用程序的dll程序集,我在我的powershell脚本中使用load DLL包含我需要使用的委托类型,委托名称为: "X.Y.Delegate" 我在该DLL中有另一个方法,应以这种方式调用: Method( delegatetype CallbackMethod) 因此,我需要: 在我的脚本中定义类型为“X.Y.delegate”的委托,例如$MyDelegate 定义回调方法,以便在触发流程事件时调用它” 注意:如果我的问题看起来很傻,我很抱歉,我是一个绝对的初学者
"X.Y.Delegate"
我在该DLL中有另一个方法,应以这种方式调用:
Method( delegatetype CallbackMethod)
因此,我需要:
“X.Y.delegate”
的委托,例如$MyDelegate
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);
}
});
}
}
}
您的实际问题是什么?您是在问如何实现这些功能,还是想了解哪些选项更好?谢谢您的回答:)我实际上是在使用它来最大限度地减少资源消耗。与其每分钟检查10000个标记值,不如检查已更改的内容,我可以订阅eventhandler,创建自己的scriptblock将在事件发生时执行。这样,我就不会扫描我的10000个标记,每当发生变化时,我都会被回调。这是我对主题的理解,如果我错了,如果你纠正我,我将不胜感激。再次感谢。非常感谢,它确实有效。我认为这个想法是变量“ScriptBlock”“它封装了要执行的块。当我的应用程序开始回调脚本块时,Powershell停止响应,但我现在可以在我的应用程序服务器日志中看到处理程序启动,发送了一个处理程序对象,这意味着我的方向正确。您能否告诉我,在脚本执行后,powershell如何响应我的应用程序回调?当我的应用服务器回叫我powershell停止时,我在ISE上运行脚本debug。我应该在控制台中看到输出吗?Thanks@AhmedAtef-根据您的评论进行更新。
# 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."