我在 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 方法返回时处理该问题?