C# Keep 方法执行/侦听数据而不使用 While(true) 循环或 Thread.Sleep?



我在文档中得到了一段数据,我被赋予了从设备接收数据。

下面的代码只会侦听 5 秒钟,然后该方法将返回并且程序将终止。

public void ListenForData()
{
...
DataReader r = new DataReader();
...
r.DataRead += delegate (Object sender, DataEventArgs e)
{
Console.WriteLine("Read: " + e.Data);
};
r.StartListening();
Thread.Sleep(5000);
r.Dispose();
}

我想保持该方法打开(以便我可以继续收听数据(,但我不确定执行此操作的正确方法。我查看了以下回复:

while(true)
{
//my code
Thread.sleep(0);
}

但我不确定这是最佳用例。我觉得它会占用很多 CPU,并不是侦听这些数据的真正预期方式。

那么我还有什么其他选择呢?

我认为您的DataReader需要是一个范围限定为您需要接收数据的持续时间的字段。像这样的东西(假设Windows应用程序(:

class MainForm : Form
{
DataReader dataReader;
void listenButton_Click(object s, EventArgs e)
{
this.dataReader = new DataReader();
this.dataReader.DataRead += delegate (Object sender, DataEventArgs e)
{
Console.WriteLine("Read: " + e.Data);
};
this.dataReader.StartListening();
}
void stopButton_Click(object s, EventArgs e)
{
this.dataReader.Dispose();
this.dataReader = null;
}
}

或控制台:

static class Program
{
static DataReader dataReader;
static void Main(string[] args)
{
StartListen();
Console.WriteLine("Push enter to exit");
Console.ReadLine(); // wait for enter key to exit
StopListen();
}
static void StartListen()
{
dataReader = new DataReader();
dataReader.DataRead += delegate (Object sender, DataEventArgs e)
{
Console.WriteLine("Read: " + e.Data);
};
dataReader.StartListening();
}
static void StopListen()
{
dataReader.Dispose();
dataReader = null;
}
}

最新更新