2

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

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

"X.Y.Delegate"

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

Method( delegatetype CallbackMethod)

所以,我需要:

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

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

注意:如果我的问题看起来很愚蠢,我很抱歉,我是绝对初学者。

4

1 回答 1

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);
    }
   });
  }
 }
}

电源外壳:

# 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."
于 2013-05-08T19:23:38.087 回答