C#文件流在线程中变得紧密 main(字符串[]参数){ 字符串文件=@“D:\123.txt”; 使用(FileStream f=File.Open(File,FileMode.Open,FileAccess.Read,FileShare.Read)) { f、 位置=0; 星形螺纹(f); } } //这是一个供用户使用的公共API 公共静态线程StartReadBookThread(流) { Console.WriteLine(“CanSeek:+stream.CanSeek”); var t=新线程(()=>DoReadBook(流)); t、 Start(); 返回t; } 私有静态void DoReadBook(流) { Console.WriteLine(“CanSeek:+stream.CanSeek”); }
在C#文件流在线程中变得紧密 main(字符串[]参数){ 字符串文件=@“D:\123.txt”; 使用(FileStream f=File.Open(File,FileMode.Open,FileAccess.Read,FileShare.Read)) { f、 位置=0; 星形螺纹(f); } } //这是一个供用户使用的公共API 公共静态线程StartReadBookThread(流) { Console.WriteLine(“CanSeek:+stream.CanSeek”); var t=新线程(()=>DoReadBook(流)); t、 Start(); 返回t; } 私有静态void DoReadBook(流) { Console.WriteLine(“CanSeek:+stream.CanSeek”); },c#,filestream,C#,Filestream,在DoReadBook方法中,流变为关闭,CanSeek变为false。 如果我想在线程中读取流,如何处理它 一般的方法是我们为用户提供一个公共API StartReadBookThread,它在一个线程中运行。 用户我们总是喜欢在建议使用()中调用参数文件流{}。。。对。 那么,我们如何才能以更好的方式读取文件。 你知道我们只是在一个线程中执行,有时它可能会被关闭。当StartReadBookThread返回并且你在main中点击using语句中的}时,流被释放 您的工作流程基本上是: 买一台
DoReadBook
方法中,流变为关闭,CanSeek
变为false。如果我想在线程中读取流,如何处理它 一般的方法是我们为用户提供一个公共API StartReadBookThread,它在一个线程中运行。 用户我们总是喜欢在建议使用()中调用参数文件流{}。。。对。 那么,我们如何才能以更好的方式读取文件。
你知道我们只是在一个线程中执行,有时它可能会被关闭。当
StartReadBookThread
返回并且你在main
中点击using语句中的}
时,流被释放
您的工作流程基本上是:
FileStream
)线程
)使用
语句)您需要等待从函数StartReadBookThread返回的线程 请查看更新的代码段
main(string[] args)
{
string file = @"D:\123.txt";
using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
f.Position = 0;
var t = StartReadBookThread(f);
t.Join(); // wait on the thread
}
}
private static Thread StartReadBookThread(Stream stream)
{
Console.WriteLine("CanSeek:" + stream.CanSeek);
var t = new Thread(() => DoReadBook(stream));
t.Start();
return t;
}
我想要这个代码,你为什么不在线程中打开流呢?你的整个代码让我很困惑,如果
CanSeek
是false
,那么你会在f.Position=0
上得到一个异常,但是你要先这样做:在你检查之前。@John在startreadbookshread
返回后,流就关闭了,这通常是在运行DoReadBook
之前。@John我只是在解决您对f.Position=0
的困惑,这很好。CanSeek稍后将变为false。StartReadBookThread是一个公共API。生成新线程只是为了立即冻结原始线程有什么意义?不妨在原始线程上进行工作。@GSerg是的,你是对的,我为他的问题提供了解决方案。我知道这不是做流处理的正确方法。我知道有更好的方法可以做到这一点。
using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var stream = new MemoryStream();
f.Position = 0;
f.CopyTo(stream);
StartReadBookThread(stream );
}