Powershell致电大会代表

时间:2013-05-08 18:28:46

标签: powershell dll delegates

我有一个用于我们的过程控制应用程序的dll程序集,我在 powershell 脚本中使用了load。

DLL包含我需要使用的委托类型,委托名称为:

"X.Y.Delegate"

我在该DLL中有另一种方法应该以这种方式调用:

Method( delegatetype CallbackMethod)

所以,我需要:

  1. 在我的"X.Y.Delegate"类型的脚本中定义委托,例如$MyDelegate

  2. 定义一个回调方法,以便在触发流程事件时调用它“

  3. 注意:如果我的问题看起来很傻,我很抱歉,我是一名绝对的初学者。

1 个答案:

答案 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."