我有一个启动
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# using 语句的文档
using (var reader = new StreamReader(pipeClient)) {
string executionSymbol = reader.ReadLine();
} // <-- readed is disposed here and cannot be used later in the code