我正在使用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脚本块?