![](/img/trans.png)
[英]Dispatcher.CurrentDispatcher.InvokeAsync not working
[英]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 文档会比我做得更好:
- 结果通过 Output 阅读器返回。 2) 当使用 InvokeAsync 调用管道时,调用不会完成,直到管道输入关闭。 在将所有输入写入输入 pipe 后,InvokeAsync 的调用方必须关闭输入 pipe。通过调用 Pipeline.Input.Close() 关闭输入 pipe;
相反,您需要先调用Pipeline.Input.Close()并且不得等待InvokeAsync
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.