C# 中 'using' 关键字的用法

问题描述 投票:0回答:1

我有一个启动

DispatcherTimer
的方法,它从
System.IO.Pipes.NamedPipe
读取所有消息。在计时器开始之前,我想阅读第一条消息。

// Initiate the PipeClient
pipeClient = new NamedPipeClientStream(".", pipeName, PipeDirection.In);
pipeClient.Connect();

//declare executionSymbol
var reader = new StreamReader(pipeClient);
string executionSymbol = reader.ReadLine();

//start reading the messages
timer = new DispatcherTimer();
timer.Interval = TimeSpan.FromMilliseconds(100);
timer.Tick += async (sender, e) => {
    // Empty the Pipe...
};
timer.Start();

到目前为止效果很好,但只是因为我很好奇我做了这个改变。

//declare executionSymbol
using (var reader = new StreamReader(pipeClient)) {
    string executionSymbol = reader.ReadLine();
}

我没想到它会有任何实际变化,但事实证明,一旦调用该方法,它就会让我的程序崩溃。为什么会这样?随时向我询问更多信息!

c# multithreading asynchronous using system.io.pipelines
1个回答
0
投票

请查看有关 C# using 语句的文档

using (var reader = new StreamReader(pipeClient)) {
    string executionSymbol = reader.ReadLine();
} // <-- readed is disposed here and cannot be used later in the code
© www.soinside.com 2019 - 2024. All rights reserved.