I open a FileStream
with FileMode.Open
and FileAccess.Read
. Shortly after that I call a function to handle the file's contents. I use Invoke
to make the call because the call comes from a Thread
and the function has to put the results on a Form
. The function accepts any kind of Stream (I call it with MemoryStream
s too without a problem) and uses XmlTextReader
to read the XML in the FileStream
, but on rare occasions for unknown reasons even the first Read()
throws an ObjectDisposedException
and the stream's CanRead
property returns false if the stream was already closed.
In the Thread
the FileStream
is a local using
variable, so I don't think another threads should be able to close it, and I don't close it until the Invoke
returned. There are no Exceptions
thrown so the file is definetly there (since there is no FileNotFoundException
) and should be accessed properly (since there is no UnauthorizedAccessException
and IOException
).
How could my FileStream
still look closed sometimes just after opened?
(It might matter that I'm running my code on a Windows CE 5 device with Compact Framework 3.5 and I wasn't able to reproduce the same behaviour on my desktop PC with XP yet.)
EDIT: I know, that this Invoke is ugly but that alone can't be a reason to fail, can it? (And, in most of the cases it doesn't fail at all.)
//the code in the thread
//...
using (FileStream fs = File.Open(assemblyPath + "\\white.xml", FileMode.Open, FileAccess.Read))
{
mainForm.Instance.Invoke(new DataHandler(mainForm.Instance.handleData), new object[] { fs });
}
//...
//and the handler
public void handleData(Stream stream)
{
infoPanel.SuspendLayout();
try
{
using (XmlTextReader xml = new XmlTextReader(stream))
{
//it doesn't matter what is here
}
}
catch{}
}