2011-12-13 119 views
3

我得到這個錯誤ReadTimeout轉換字節數組到流

ReadTimeout = '((System.IO.Stream)(ms)).ReadTimeout' threw an exception of type 'System.InvalidOperationException'. 

我的代碼時引發了異常。

byte[] imageBytes = Convert.FromBase64String(img); 
MemoryStream ms = new MemoryStream(imageBytes, 0, imageBytes.Length);  //Problem generates here// 

謝謝..

+0

唯一的例外是不是在您指定的行拋出。 ((System.IO.Stream)(ms))。ReadTimeout'拋出一個異常... –

+1

只有在調試時纔會發生異常嗎?它會拋出一個異常,因爲'MemoryStream'不支持超時,但它不應該影響你的程序(根據你發佈的兩行代碼)。 –

回答

-1

ReadTimeout屬性必須被覆蓋,在基System.IO.Stream類它總是拋出System.InvalidOperationException錯誤by design

int readTimeout = ms.ReadTimeout; 

編輯:發佈前沒有檢查.. MemoryStream的也不會覆蓋財產

讀取超時時,該解決方案是不是要投 ms基礎類型 - 這種流的意思超時未實現。

您必須使用Stream類的其他實現來覆蓋ReadTimeout屬性,或者編寫自己的實現。

+0

如果Mia建議在'MemoryStream(byte [],int,int)'構造函數中確實發生異常,那麼這不是一個框架錯誤,當然不是設計?此外,我認爲即使將其投射到基地,「虛擬」方法也會在實際課程中結束? –

+0

當我運行我得到'參數無效。'我QuickWatched我的流ms,並從我得出的結論---- ReadTimeout ='((System.IO.Stream)(ms))。ReadTimeout'拋出類型'System.InvalidOperationException'的異常和WriteTimeOut =' ((System.IO.Stream)(ms))。ReadTimeout'拋出一個異常'System.InvalidOperationException' – Mia

+0

@ C.Evenhuis沒有這個錯誤不能來自構造函數'MemoryStream'我只是再次檢查其代碼。 –

4

僅當流支持超時時,纔可以使用ReadTimeout/WriteTimeout屬性。 您可以通過CanTimeout屬性進行檢查。如果CanTimeout屬性返回false,則對這些屬性的所有訪問應該引發InvalidOperationException。

-2

你應該小心數據庫中的圖像類型,如果圖像太大,那麼你必須使用LONGBLOB而不是BLOB。

+1

LONGBLOB是一個MySQL的東西。這個問題與數據庫無關。 –

0

我用下面的代碼,我需要的MemoryStream用作電子郵件附件:

string [email protected]"C:\images\myimage.img" 
MemoryStream result = new MemoryStream(); 
MemoryStream source = new MemoryStream(File.ReadAllBytes(filename)); 
source.WriteTo(result);