2

プロセス制御アプリケーション用の dll アセンブリがあり、これをpowershellスクリプト内で load に使用しています。

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 に答える