Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net SAPI中的AccessViolationException正在使我的控制台崩溃_.net_Text To Speech_Access Violation_Sapi - Fatal编程技术网

.net SAPI中的AccessViolationException正在使我的控制台崩溃

.net SAPI中的AccessViolationException正在使我的控制台崩溃,.net,text-to-speech,access-violation,sapi,.net,Text To Speech,Access Violation,Sapi,我有一个控制台应用程序,它具有使用SAPI tts引擎创建文件的功能: 函数SpeechFile(文本作为字符串,文件夹作为字符串,语音作为字符串)作为字符串 Dim pth=Path.Combine(文件夹,Text.GetHashCode&“.wav”) 如果文件不存在(pth),则 使用synth=新的语音合成器 Dim fmt=新建Speech.AudioFormat.SpeechAudioFormatInfo(8000,Speech.AudioFormat.AudioBitsPerSa

我有一个控制台应用程序,它具有使用SAPI tts引擎创建文件的功能:

函数SpeechFile(文本作为字符串,文件夹作为字符串,语音作为字符串)作为字符串
Dim pth=Path.Combine(文件夹,Text.GetHashCode&“.wav”)
如果文件不存在(pth),则
使用synth=新的语音合成器
Dim fmt=新建Speech.AudioFormat.SpeechAudioFormatInfo(8000,Speech.AudioFormat.AudioBitsPerSample.8,Speech.AudioFormat.AudioChannel.Mono)
synth.SetOutputToWaveFile(pth,fmt)
合成器。选择语音(语音)
尝试
synth.Speak(文本)
特例
例如数据添加(“路径”,第页)
例如数据添加(“文本”,文本)
我不知道为什么这个错误没有正常记录
结束尝试
终端使用
如果结束
返回pth
端函数
调用
Speak
会间歇性失败,出现
AccessViolationException
。尽管我添加了
HandleProcessCorruptedStateExceptions
属性,并将调用包装在
Try…Catch
中,但此异常会使整个控制台应用程序崩溃。因此,我无法记录崩溃或处理/关闭/重新启动

我的第一个想法是引擎试图同时创建两个文件,但事实并非如此


相关Windows日志:

出错应用程序名称:MyConsole.exe,版本:1.0.0.0,时间 戳记:0x56f8fd6e故障模块名称:Moses64.dll,版本:0.0.0.0, 时间戳:0x510a6596异常代码:0xc0000005故障偏移量: 0x00000000000d03a1出错进程id:0x1c10出错应用程序 开始时间:0x01d188d7da12cb52故障应用程序路径:C:\Program Files\MyConsole\MyConsole.exe故障模块路径: C:\ProgramFiles(x86)\Aharon\Hebrew Speech 合成器\Ron\Moses64.dll报告Id: 0a70f320-f519-11e5-80c3-d05099606348故障包全称: 错误包相对应用程序ID:

应用程序:MyConsole.exe框架版本:v4.0.30319 描述:由于未处理的异常,进程已终止。 异常信息:System.AccessViolationException位于 System.Speech.Synthesis.TtsEngine.ITtsEngine.Speak(System.Speech.Synthesis.TtsEngine.SPEAKFLAGS, System.Guid ByRef,IntPtr,IntPtr,IntPtr)位于 System.Speech.Internal.Synthesis.TtsProxySapi.Speak(System.Collections.Generic.List`1, 字节[])位于 System.Speech.Internal.Synthesis.VoiceSynthesis.SpeakText(System.Speech.Internal.Synthesis.SpeakInfo, 系统、语音、合成、提示、, System.Collections.Generic.List``1) at System.Speech.Internal.Synthesis.VoiceSynthesis.ThreadProc()位于 System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object,布尔值)位于 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object,布尔值)位于 System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback,System.Object)位于 System.Threading.ThreadHelper.ThreadStart()



我如何处理这个异常,或者更好地说,如何防止它发生?

最后,这是因为我在
app.config
中缺少了
legacyUnhandledExceptionPolicy
。(由于某种原因,我把它放错了地方)

一旦我将它添加到我的
app.config
中,异常就会得到很好的处理

似乎仅靠
HandleProcessCorruptedStateExceptions
本身还不够


谢谢大家的帮助

从堆栈跟踪中可以明显看出,此异常是在工作线程上引发的,而不是在SpeechFile()方法中引发的。所以你抓不到它。你需要让你的机器恢复健康。这需要什么是不可能猜测的,它需要一个非托管调试器。避免第三方声音,请尝试其他机器。嗨。谢谢你的意见。你能再解释一下吗?如果这发生在外部进程的工作线程上,为什么我的控制台会崩溃?我不介意他们的引擎坏了,但为什么它会把我的控制台带下来呢?不幸的是,我现在没有选择的引擎(由于许可和管理决定等)。我只需要优雅地忽略他们的错误。谢谢谷歌“legacyUnhandledExceptionPolicy”。别用了,嗨。关于这件事我读了不少。从my
app.config
中删除它是否会在tts引擎引发此类异常时使控制台继续运行?