J'ai une classe qui gère une action en temps réel dans un thread qu'il commence. Il y a d'autres thèmes en jeu dans cette application car il est très complexe. Quand cette action commence, je dois ouvrir une fenêtre et la fermer quand c'est fait. Cela semble facile.Threads UI et les cauchemars
Il existe des événements auxquels je me connecte lorsque cette action démarre et s'arrête. Dans ces gestionnaires d'événements, je place le code:
private void Voice_SpeakStarted(object sender, TMSpeakStartedEventArgs e)
{
InfoWindow = new Form();
InfoWindow.Show();
}
/// <summary>
/// this is the event handler speaking stops
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void Voice_SpeakCompleted(object sender, TMSpeakCompletedEventArgs e)
{
if (InfoWindow.InvokeRequired)
{
InfoWindow.Invoke(new Action(() =>
{
InfoWindow.Close();
}));
InfoWindow.Hide();
}
}
Il y a des fois où j'obtiens une erreur que le thread s'est terminé. (Une erreur s'est produite lors de l'appel de la méthode Le thread de destination n'existe plus.)
Je semble toujours avoir la fenêtre à afficher. Je n'arrive pas à fermer la fenêtre.
Je vois aussi que parfois le gestionnaire ne s'appelle pas lui-même.
J'ai besoin d'aide. Je peux poster plus de code s'il serait utile.
Modifié - ajouté plus de code Voici comment je commence la classe
public void start()
{
//It's already alive, nothing to do
if (alive) return;
//Make sure this is the only place where alive is set to true
alive = true;
Voice.SpeakCompleted += new Speech.TMSpeakCompletedDelegate(Voice_SpeakCompleted);
Voice.SpeakStarted += new Speech.TMSpeakStartedDelegate(Voice_SpeakStarted);
dispatch = new Thread(new ThreadStart(ProcessSayList));
dispatch.Start();
}
Le constructeur de la classe est
public AnimationControl(dynamic parent)
{
Parent = parent;
Voice = new Speech();
q = Queue.Synchronized(new Queue(1000));
start();
}
Qu'est-ce 'ProcessSayList'? Quelle classe? Ajoutez du contexte! – Blindy