В веб-приложении MVC я использую класс SpeechSynthesizer для передачи некоторого текста в файл .wav во время функции, вызываемой обработчиком действий контроллера, который возвращает представление. Код выполняется, записывает файл, и дескриптор действия возвращается, но сервер разработки обычно, но не всегда, никогда не возвращается со страницей возврата. Это код преобразования текста в речь:
string threadMessage = null;
bool returnValue = true;
var t = new System.Threading.Thread(() =>
{
try
{
SpeechEngine.SetOutputToWaveFile(wavFilePath);
SpeechEngine.Speak(text);
SpeechEngine.SetOutputToNull();
}
catch (Exception exception)
{
threadMessage = "Error doing text to speech to file: " + exception.Message;
returnValue = false;
}
});
t.Start();
t.Join();
if (!returnValue)
{
message = threadMessage;
return returnValue;
}
Я видел пару сообщений об аналогичной проблеме в сервисе, который советовал выполнять операцию в потоке, отсюда и вышеупомянутый поток.
На самом деле, использование SpeechSynthesizer для других целей тоже может зависнуть. У меня была страница, на которой только что перечислялись голоса, но она тоже зависала. Поскольку в любом потоке нет пользовательского кода, если я приостанавливаю отладчик, я понятия не имею, как его отлаживать.
Я пробовал впоследствии Dispose'ing объекта SpeechSynthesizer, вызывая SetOutputToDefaultVoice, но безрезультатно. Я пробовал его как в Windows 8.1, так и в Windows 8, работая с сервером разработки под отладчиком или работая с IIS Express отдельно.
Любые идеи? Могу ли я дать еще одну полезную информацию?
Спасибо.
-Джон