【发布时间】:2013-09-13 02:15:40
【问题描述】:
我正在 Visual C# 中创建一个 GUI,并且我正在实现一个功能,用户可以打开一个文件并从该文件中读取行。我有从主 GUI 线程中的 OpenFileDialog 创建 StreamReader 的代码,然后将 StreamReader 传递给 BackgroundWorker。
StreamReader streamRdr = new StreamReader(dialog.OpenFile());
worker.RunWorkerAsync(streamRdr);
这是好的做法吗?我将 StreamReader 对象传递给后台线程,因为我不希望 BackgroundWorker 处理 OpenFileDialog 代码。
在 BackgroundWorker DoWork 方法中,我像这样使用 StreamReader
using (StreamReader tempRdr = (StreamReader)e.Argument)
{
// read from StreamReader...
return;
}
我的第二个问题是即使 StreamReader 是在主 GUI 线程中创建的,它是否会正确关闭?而且我是否必须明确调用StreamReader.Close()?或者using 语句会在 DoWork 方法返回时处理这个问题?
【问题讨论】:
-
我必须显式调用
StreamReader.Close()?不,using就足够了。 -
您使用哪个框架来构建 GUI? Winforms 还是 WPF?
-
抱歉应该指定,WinForms
-
练习?嗯。如果您担心,您可以将文件名传递给工作人员并拥有它
File.Open(filename)。
标签: c# backgroundworker using streamreader