Visual Studio 2005 - debug thread
Bonjour à tous,
J'ai conçu un programme qui contient un thread devant mettre à jour l'interface en fonction de son travail. Bref, c'est bizarre parcequ'à chaque fois que je débug (pas à pas), Visual Studio 2005 (SP1) *freeze* pour 10 secondes, ensuite il me permet de jumper à la ligne suivante et ensuite mon thread meurt sans savoir pourquoi.
Alors je me suis dit, pourquoi pas repartir un projet vide et y exécuter le même code au plus simple possible afin de vérifier si ce problème existe. Et c'est le cas !
Visual Studio freeze entre l'exécution ces deux lignes (// *******).
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
|
public partial class Form1 : Form
{
private Thread m_Thread = null;
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
}
private static void UpdateFirmware(object param)
{
Form f = (Form1)param; // *******
// Simple test pour le pas à pas
int k = 0; // *******
k = k + 2;
}
private void button1_Click(object sender, EventArgs e)
{
m_Thread = new Thread(new ParameterizedThreadStart(UpdateFirmware));
m_Thread.IsBackground = true;
m_Thread.Start(this); // *******
}
} |
Toutefois, j'ai remarqué que le problème n'existe pas si je ne passe pas *this* en paramètre au Thread.
Comme par exemple, ce bout de code fonctionne très bien en debug :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| private static void UpdateFirmware(object param)
{
int k = (int)param;
// Simple test pour le pas à pas
int k = 0;
k = k + 2;
}
private void button1_Click(object sender, EventArgs e)
{
m_Thread = new Thread(new ParameterizedThreadStart(UpdateFirmware));
m_Thread.IsBackground = true;
m_Thread.Start(4);
} |
Est-ce que j'ai louppé quelque chose ? Je ne comprend pas trop. Je dois bien passé *this* en paramètre si je veux mettre à jour mon interface (avec un BeginInvoke évidemment). J'ai pas trop envie de passer une structure avec tous les contrôles à mettre à jour, ça sera long pour rien. À moins que je n'aie pas le choix.
Merci