Bonjour

Voilà le code associé à ce problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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.