main(string[] args) {
string file = @"D:123.txt";
using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
f.Position = 0;
StartReadBookThread(f);
}
}
//this is a public API for user
public static Thread StartReadBookThread(Stream stream)
{
Console.WriteLine("CanSeek:" + stream.CanSeek);
var t = new Thread(() => DoReadBook(stream));
t.Start();
return t;
}
private static void DoReadBook(Stream stream)
{
Console.WriteLine("CanSeek:" + stream.CanSeek);
}
在DoReadBook
方法中,流变得闭合,CanSeek
变为假。
如果我想在线程中读取流,如何处理它 一般的方法是我们为用户提供一个公共的API StartReadBookThread,它在一个线程中运行。 用户我们总是喜欢在建议使用(({} 中调用参数文件流...道路。 那么我们如何才能以更好的方式读取文件。 你知道我们只是在一个线程中做,有时它可能会被关闭。
当StartReadBookThread
返回并且您在main
中点击 using 语句中的}
时,您的流将被释放。
您的工作流程基本上是:
- 买一台割草机(
FileStream
(。 - 要求工人修剪草坪(
Thread
(。 - 立即归还割草机(
using
声明(。 - 期望工人继续用你不再拥有的割草机修剪草坪(错误的期望(。
using (FileStream f = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.Read))
{
var stream = new MemoryStream();
f.Position = 0;
f.CopyTo(stream);
StartReadBookThread(stream );
}
我想要这段代码
您需要等待从函数 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;
}