2011-06-24 22 views
1

我只是使用靜態方法將字節轉換爲圖像。 在多線程環境中是安全的,還是必須實例化每個調用的 ?作爲庫的靜態方法

namespace Library 
{ 

    public static class ByteToImage 
    { 
     public static Image Convert(byte[] byteArrayIn) 
     { 
      MemoryStream ms = new MemoryStream(byteArrayIn); 
      Image returnImage = Image.FromStream(ms); 
      return returnImage; 
     } 
    } 
} 

回答

4

它不使用任何方法之外的任何東西,所以它是線程安全的只要什麼也沒有更新另一個線程中的byteArrayIn

namespace Library 
{ 

    public static class ByteToImage 
    { 
     public static Image Convert(byte[] byteArrayIn) 
     { 
      Image returnImage = Image.FromStream(ms); 
      return returnImage; 
     } 
    } 
} 

UPDATE

我orignally建議關閉該流。不過,正如評論中指出的那樣,這個特殊的操作需要流在圖像的整個生命週期內保持開放。 See MSDN

但是,一般它是一個好主意,清理使用塊中的流,以確保它完成。

+1

好吧,這就是我必須說的(現在刪除的)完全覆蓋的一切; p –

+2

-1。這將導致圖像失敗。你**不應該**釋放內存流,因爲它是圖像使用的緩衝區。 – Aliostad

+0

我檢查了MSDN並更正了我的答案。 –

0

如果靜態方法不使用任何共享資源,則它們是線程安全的。

此致不使用任何共享資源,因此是好的 - 除非別的地方在你的代碼使用的是相同的圖像。

+0

byteArrayIn是一個潛在的共享資源。 –

1

它不使用共享資源,所以沒關係,只要沒有還另一個線程更新byteArrayIn科林說

+1

byteArrayIn是一個潛在的共享資源。 –

+0

這是真的。你的迴應更準確。我只是更新它,不會讓任何人閱讀它。謝謝 –