2009-02-20 100 views
1

我有這樣的代碼:C#線程,性能第二部分

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) 
     { 
      ... 
     } 
    } 
} 

如何更新圖像?我想保存圖像的副本,以便在用戶需要時更新pictureBox。

謝謝!

+0

什麼問題到底?如果我沒有弄錯,該代碼應該運行良好。 – Noldorin 2009-02-20 16:02:36

+0

你的意思是,「我如何從另一個線程更新令牌」? – Richard 2009-02-20 16:05:34

回答

1

你在那裏的代碼應該可以正常工作。如果你在另一個線程通過使用令牌,你可能會想syncronize獲取和設置,以避免數據損壞:

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

這種同步化方法not 100% safe in all circumstances,但對你的目的,應該工作

2

你的代碼會很好地工作。但是,如果您想從另一個線程讀取值並確保始終獲取最新值,則應該使其變爲易失性,或者每次讀取或寫入時都要獲取一個鎖。

請參閱the memory model section of my threading article瞭解更多信息。