2 votes

Powershell Appel d'un délégué d'assemblée

J'ai un fichier dll pour notre application de contrôle de processus, que j'utilise pour charger dans mon fichier powershell script.

La DLL contient un type de délégué que je dois utiliser, le nom du délégué est :

"X.Y.Delegate"

J'ai une autre méthode dans cette DLL qui devrait être appelée de cette façon :

Method( delegatetype CallbackMethod)

Je dois donc :

  1. définir un délégué dans mon script de type "X.Y.Delegate" par exemple $MyDelegate

  2. définir une méthode de rappel afin qu'elle soit invoquée lorsqu'un événement du processus est déclenché"

Note : Je suis désolée si ma question semble stupide, je suis une débutante ABSOLUE.

1voto

dugas Points 6626

Mise à jour :

Après avoir lu votre commentaire et votre question de plus près, je pense que vous cherchez à utiliser la gestion d'événements asynchrones. Vous trouverez ci-dessous un exemple qui écoute les événements jusqu'à ce qu'un délai d'attente soit atteint et qui se termine ensuite. Cet exemple suppose que vous puissiez modifier votre assemblage pour ajouter un événement.

Une classe qui génère des événements :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X