繁体   English   中英

PipeLine.InvokeAsync 不工作

[英]PipeLine.InvokeAsync not working

我正在尝试从 c# 代码异步调用 powershell 文件,就像发射后忘记一样。 我尝试使用 Powershell.BeginInvoke,但在我调用 EndInvoke 之前它不会调用该文件。 无论如何,我尝试了 pipeline.InvokeAsync 方法,但仍然无法调用脚本。当我只调用 Invoke 方法时它有效。 下面是我试过的代码

using(  PowerShell shell = PowerShell.Create())
        { 
Pipeline pipe = shell.Runspace.CreatePipeline();
            pipe.Commands.AddScript("d:\\AddContentTest.ps1"); 
pipe.InvokeAsync(); 
}

任何帮助深表感谢...............

您正在调用InvokeAsync而不await它。 该方法将立即返回,并且由于退出using范围,PowerShell将进行处理。

尝试这个:

public async Task InvokePowerShellAsync()
{ 
    using (PowerShell shell = PowerShell.Create())
    { 
         Pipeline pipe = shell.Runspace.CreatePipeline();
         pipe.Commands.AddScript("d:\\AddContentTest.ps1"); 

         await pipe.InvokeAsync(); 
    }
}

编辑

要完成答案并发表您的评论,您可以使用后台线程,尽管我不建议这样做:

public void InvokePowerShellAsync()
{ 
    Task.Run(() => 
    {
        using (PowerShell shell = PowerShell.Create())
        { 
            Pipeline pipe = shell.Runspace.CreatePipeline();
            pipe.Commands.AddScript("d:\\AddContentTest.ps1");

            pipe.Invoke();
        }        
    }      
}

这是一个非托管端口。 等待Pipeline.InvokeAsync将不起作用。

MS 文档会比我做得更好:

  1. 结果通过 Output 阅读器返回。 2) 当使用 InvokeAsync 调用管道时,调用不会完成,直到管道输入关闭 在将所有输入写入输入 pipe 后,InvokeAsync 的调用方必须关闭输入 pipe。通过调用 Pipeline.Input.Close() 关闭输入 pipe;

相反,您需要先调用Pipeline.Input.Close()并且不得等待InvokeAsync

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM