2011-05-05 123 views
1

使用System.IO.MemoryStream類時出現問題。爲什麼MemoryStream Position屬性會隨着SetLength的變化而變得不可變?

創建它,像這樣後:

var memory = new MemoryStream(); 

它然後將一些字節的長度寫入到它。

var length = 181; 
memory.SetLength(length); 

然後在調試器,存儲器示出了長度和 位置都設定爲181.在單獨的簡單測試程序 它屬性在SetLength()後零示出的位置不動。

此外,如果我的Position屬性更改0使用 調試器或添加一行的代碼,它忽略 和仍顯示181作爲位置屬性。因此它 表現得好像不可變。

但是,再次在一個簡單的單元測試中,這可以按預期工作。

起初,如果MemoryStream不是線程安全的,這似乎是一個線程問題,因爲 。但在調試器中, 在調用任何此代碼之前,我凍結了所有其他線程。 它仍然如上所述失敗。

嗯,這是最離奇的。任何想法要嘗試什麼?

回答

2

我看不到和你一樣的東西。如果我創建與主營以下代碼控制檯應用程序:

 var x = new MemoryStream(); 
     x.SetLength(181); 

..和跟蹤過去調用SetLength,調試器顯示Length到181平等和Position等於0您必須有別的東西影響你的流對象。

+0

我們必須同時發佈。看到我的答案,我發現了這個錯誤,它只是在調試過程中發生的,因爲調試器調用了ToString()方法,我只希望在將事件記錄到日誌文件時發生這種情況。所以修好了。 – Wayne 2011-05-05 03:54:00

+0

雖然我會給你信用回答。你回答得太快而且正確。 – Wayne 2011-05-05 04:01:40

0

其實,找出問題所在。第一個線索是它只發生在調試器中。

原因是ToString()方法被覆蓋。

它正在讀取內存並在調試器中顯示它。這是從記憶中讀取,因此修改了位置。

問題解決。

謝謝。

相關問題