2009-02-20 4 views
1

Je possède ce code:C# fils et propriétés deuxième partie

public partial class FrmPrincipal : Form 
{ 
    private Image imagen; 

    public FrmPrincipal() 
    { 
     InitializeComponent(); 
     ... 
    } 

    private void menuItem1_Click(object sender, EventArgs e) 
    { 
     Thread t = new Thread(RequestImage); 
     t.Start(); 
    } 

    private void RequestImage() 
    { 
     try 
     { 
      ... 

      // I want to update this.token 
      this.imagen = retrieveImageFromWebService(); 

      ... 
     } 
     catch (Exception ex) 
     { 
      ... 
     } 
    } 
} 

Comment puis-je mettre à jour l'image? Je veux enregistrer une copie d'image pour mettre à jour un pictureBox lorsque l'utilisateur en a besoin.

Merci!

+0

Quoi le problème exactement? Ce code devrait fonctionner correctement, si je ne me trompe pas. – Noldorin

+0

Voulez-vous dire, "comment puis-je mettre à jour un jeton depuis un autre thread"? – Richard

+0

@vansfannel - devrait fonctionner très bien ... – Kieron

Répondre

1

Le code que vous avez ici devrait fonctionner correctement. Si vous utilisez jeton dans l'autre fil à travers, vous aurez probablement envie de syncronize récupère et définit pour éviter la corruption des données:

private string token { 
    [MethodImpl(MethodImplOptions.Synchronized)] get; 
    [MethodImpl(MethodImplOptions.Synchronized)] set; 
} 

Cette méthode de synchronisation est not 100% safe in all circumstances, mais pour vos fins, il devrait fonctionner

+0

Cela finit par se bloquer sur "ceci" ce qui est généralement une mauvaise idée. OMI, il est préférable de verrouiller un verrou explicite et privé. –

+0

Jon fait un bon point bien sûr - j'allais pour la solution la plus simple ici, mais en utilisant un verrou séparé est la meilleure pratique –

2

Votre code fonctionnera parfaitement bien. Toutefois, si vous voulez lire la valeur d'un autre thread et vous assurer que vous obtenez toujours la valeur la plus récente, vous devez la rendre volatile ou acquérir un verrou chaque fois que vous le lisez ou l'écrivez.

Voir the memory model section of my threading article pour plus d'informations.

Questions connexes