マルチスレッドを適用するクラスがあります。一度に 1 つのスレッドだけが「startSpeaking()」できるようにしたいと思います。これが私の試みです:
class VoiceEffect
{
SpeechSynthesizer reader = new SpeechSynthesizer();
static readonly object _locker = new object();
public void createVoiceThread(string str)
{
Thread voicethread = new Thread(() => startSpeaking(str)); // Lambda Process
voicethread.IsBackground = true;
voicethread.Start();
}
public void startSpeaking(string str)
{
lock (_locker)
{
reader.Rate = -2; // Voice effects.
reader.Volume = 100;
reader.Speak(str);
}
}
}
createVoiceThread()
また、別のクラスからメソッドを呼び出しています。これは、別のクラスの同様の規則によって呼び出されます。例えば
class Program
{
static void Main(string[] args)
{
VoiceEffect ve = new VoiceEffect();
string text = "Hello world, how are you today? I am super-duper!!";
for( int i=0 ; i < 10 ; i++ )
{
ve.createVoiceThread(text);
ve.startSpeaking(text);
Thread.Sleep(1000);
}
}
}
私の質問は、このプログラムを変更して、startSpeaking()
が任意のスレッドによって呼び出されたときに、一度に 1 つの音声パターンのみを再生するようにするにはどうすればよいかということです。