J'ai un formulaire qui apparaît comme indiqué dans l'image ci-jointe. J'ai deux parties du formulaire qui concernent cette question: le TabControl, et le Panel, comme indiqué dans l'image. Il convient de noter que le panneau n'est PAS dans TabControl. Ma situation est que j'ai un thread qui s'exécute en continu quand le bouton, affiché dans fondre-vos-yeux verts dans le panneau, est cliqué. Le thread interroge le périphérique avec lequel j'interface et met à jour les contrôles dans le "Status" GroupBox au bas du TabControl. Lorsque l'utilisateur clique sur un contrôle dans le TabControl (événement tabControl_Enter
), je déclenche un ManualResetEvent qui permet au thread de terminer son itération afin que je puisse effectuer l'IO requis par le contrôle cliqué. Le code à suspendre le fil est la suivante:Comment arrêter un thread, autoriser le traitement d'un événement d'interface utilisateur, puis "redémarrer" le thread?
private void StopSynchThread()
{
synchWaitHandle.Reset();
//various UI changes
}
private void updateSynchStat()
{
while (true)
{
synchWaitHandle.WaitOne();
try
{
updateSynch();
}
}
Ce que je voudrais faire est de redémarrer alors automatiquement le fil, au lieu de par le bouton presse, comme cela se fait actuellement. Ce que j'essaie d'éviter, c'est d'éviter de redémarrer le thread en appelant conditionnellement le StartSynchThread()
dans chacun des gestionnaires d'événements de l'interface utilisateur "bazillion". StartSynchThread()
est défini comme:
private void StartSynchThread()
{
synchWaitHandle.Set();
}
est-il un précédent ou d'un paradigme décent pour gérer cela? Sans aucun concept de la façon de le faire, je pensais que je pouvais modifier ma fonction qui effectue l'E/S avec l'appareil pour générer un événement après avoir reçu une réponse de l'appareil, mais cela semble inélégant.
Des idées? J'apprécie vos idées. Merci.
Solution parfaitement simple. Exactement ce que j'espérais. Le gestionnaire de la pression sur le bouton gère le peu de logique qu'il y a au démarrage/arrêt, donc je peux l'utiliser assez facilement. Merci. –