我在文档中得到了一段数据,我被赋予了从设备接收数据。
下面的代码只会侦听 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;
}
}