gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 19:09:24 25 4
gpt4 key购买 nike

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

关于C# 保持方法执行/监听数据而不使用 While(true) 循环或 Thread.Sleep?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62628283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com