2009-02-20 58 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了解更多信息。