Normal que cela fonctionne, puisque c'est ce qu'il faut faire. Bon, il existe bien d'autres possibilités, mais plus complexe à mettre en place.
Dans le code initial, le [c]progress.Report|/c] est dans le lock et pas en dehors. Mon code sort justement le report du lock En général, tout accès à une variable, même en lecture, doit être dans un lock afin de garantir sa cohérence. Maintenant, le type Int32 est particulier dans la mesure où les opérations de lecture et d'écriture sont atomiques et ne nécessite pas de lock. Sauf qu'on peut très vite obtenir un code non atomique. Par exemple :
Pour sortir le progress.Report du lock
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 int a; a=5 // est atomique; Console.WriteLine(a); // l'accès à a est atomique a=a+1 // n'est pas atomique ! Car une lecture ET une écriture de a
Partager