[C#] - Problème sur fermeture d'un thread
Bonjour
Voilà le code associé à ce problème :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
|
private bool m_bIsThreadRefreshRunning = false;
private bool m_bIsApplicationClosing = false;
private void FormPrincipal_Load(object sender, System.EventArgs e)
{
...
ThreadPool.QueueUserWorkItem(new WaitCallback(RefreshModeThread), this);
}
static void RefreshModeThread(object state)
{
// Récupération du context
FormPrincipal fp = (FormPrincipal)state;
// Cette thread démare
fp.m_bIsThreadRefreshRunning = true;
// Mise à jour de controles visuels
while( !fp.m_bIsApplicationClosing )
{
// Somme-nous en mode de rafraîssement, si oui alors on met à jour ?
if ( fp.m_bIsButtonRefreshMode )
fp.UpdateDisplay();
}
// Cette thread sera arrêté après cette ligne
fp.m_bIsThreadRefreshRunning = false;
}
private void FormPrincipal_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
// Forcer l'arrêt du thread de rafraichissement
m_bIsApplicationClosing = true;
// Looper et empêcher une fermeture tant que la thread ne
// sera pas arrêter (En mode refresh la thread du haut FREEZE dans la procédure UpdateDisplay()
while (m_bIsThreadRefreshRunning)
Thread.Sleep(10);
}
private void UpdateDisplay()
{
this.m_Txt_Analog_1.Text = "Hello world"; // Cette ligne FREEZE la thread, est-ce que ce serait un problème de CROSS-Thread ? Pourtant j'ai tenté un Invoque mais aucun succès, quelque à une idée ?
}
private void m_bt_ModeStop_CheckedChanged(object sender, System.EventArgs e)
{
m_RefreshMode = false; // Stop refresh mode
}
private void m_bt_ModeRefresh_CheckedChanged(object sender, System.EventArgs e)
{
m_RefreshMode = true; // Active refresh mode
} |
Merci pour votre aide.
Re: [C#] - Problème sur fermeture d'un thread
Citation:
Envoyé par Erakis
Code:
1 2 3 4 5
|
private void UpdateDisplay()
{
this.m_Txt_Analog_1.Text = "Hello world";
} |
Cette ligne FREEZE la thread, est-ce que ce serait un problème de CROSS-Thread ? Pourtant j'ai tenté un Invoque mais aucun succès, quelque à une idée ?
En effet il est impératif d'utiliser Invoke ou BeginInvoke pour accéder aux contrôles.
Donnes donc le code Invoke que tu as essayé.