传递和调用System.Action<>从powershell到c#

时间:2017-07-21 14:41:41

标签: c# .net wpf powershell speech-recognition

我正在使用System.Speech.Recognition使用c#程序来识别语音并根据所说的内容运行PowerShell命令。

我有以下powershell脚本,它代表一个用于创建语音命令的宏:

Add-Type -Path ".\GAVPI.Lib.dll"
Add-Type -Path ".\GAVPI.Lib.Logging.dll"

[Action[GAVPI.Lib.Logging.Parameter]]$speechRecognized = {
    param($i) 
    [System.Windows.MessageBox]::Show("test")
}

$parameter = New-Object -TypeName GAVPI.Lib.Logging.Parameter -ArgumentList 
("parameter", "value")

$phrase = New-Object -TypeName GAVPI.Lib.Core.Triggers.Phrase -ArgumentList 
("default","test", $speechRecognized, $parameter)

return $phrase

此短语对象用于说明可以说和识别的命令。它成功传递给c#,如下所示:

 var list = new List<Phrase>();

        var ps = PowerShell.Create();
        var run = RunspaceFactory.CreateRunspace();
        ps.Runspace = run;
        run.Open();

        var script = ps.AddScript(".\\PowershellTemplate.ps1", true);
        var result = ps.Invoke();

        foreach (var psObject in result)
        {
            if (psObject.BaseObject is Phrase)
            {
                list.Add((Phrase)psObject.BaseObject);
            }
        }
        return list;

当识别出命令时,Phrase类调用Action:

public override void Run(Parameter selectedparameter)
{

    if (parAction != null)
    {
        parAction.Invoke(selectedparameter);
    }
}
private Action<Parameter> parAction;

当程序运行时,如果你说&#34;测试参数&#34;它调用短语类中的action<parameter>,它调用PowerShell中的脚本块。

我在parAction.Invoke(selectedparameter);行收到以下异常:

  

此线程中没有可用于运行脚本的Runspace。您可以   在。的DefaultRunspace属性中提供一个   System.Management.Automation.Runspaces.Runspace类型。脚本块   你试图调用的是:

param($i)...w("test")

如何将运行空间传递给Sysem.Action<Parameter>以便它可以运行PowerShell脚本块?

0 个答案:

没有答案