Я выполняю команду powershell синхронно. Связывает обработчик событий, который успешно выполняется, когда данные испускаются конвейером. Когда какое-то условие выполнено, я хочу прекратить выполнение команды powershell, но когда я вызываю pipeLine.Stop(), программа просто зависает бесконечно. Могу ли я знать, что происходит не так?
Command shellCommand = new Command("Get-MsolUser");
Pipeline pipeLine = powerShellRunspace.CreatePipeline();
pipeLine.Commands.Add(shellCommand);
pipeLine.Input.Close();
pipeLine.Output.DataReady += delegate(object sender,EventArgs args) {
try {
PipelineReader<PSObject> output = sender as PipelineReader<PSObject>;
if (output != null) {
bool isCompleted = false;
while (output.Count > 0 && !isCompleted) {
PSObject pso = (PSObject)output.Read();
isCompleted = addDataDelegate(pso);
}
if (isCompleted) {
pipeLine.Stop(); //HANGS HERE
log("JUST STOPPED PIPELINE..");
}
}
} catch(Exception ex) {
log(ex.ToString());
}
};
pipeLine.Invoke();
Это может быть плохой идеей, чтобы синхронно останавливать конвейер внутри делегата, который обрабатывает вывод конвейера асинхронно.
Возможно, метод Pipeline.StopAsync будет работать лучше в этом коде.