对不起,如果这个问题没有任何意义。我在c#中创建一个GUI来接收和发送数据到控制器。我被困在一个非常奇怪的宫殿里。假设我已经向控制器发送数据,控制器应该向我发送确认。我正在处理确认。我的问题是在发送数据后我想提出错误,如果我没有从控制器得到任何东西。
答案 0 :(得分:2)
在你的port_receive事件中设置一个" dataReceived"标志为真。在您的timer.Elapsed事件处理程序中,如果此值为false,则表示尚未及时收到数据,并且可能会引发错误。下面的示例演示了类似的内容,DataReceived方法表示您的port_receive方法。您可以使用定时器间隔和延迟来查看如果及时收到数据,则永远不会显示错误消息。
using System;
using System.Threading.Tasks;
using System.Timers;
namespace ConsoleApplication7
{
class Program
{
static bool dataNotReceived = true;
static readonly Timer timer = new Timer {Interval = 1000};
static void Main(string[] args)
{
timer.Elapsed += (sender, eventArgs) =>
{
if (dataNotReceived)
{
Console.WriteLine("Data not received, error thrown...");
throw new Exception();
}
};
timer.Start();
DataReceived();
Console.ReadLine();
}
static async Task DataReceived()
{
await Task.Delay(2000);
Console.WriteLine("Data received in time");
dataNotReceived = false;
timer.Stop();
}
}
}
答案 1 :(得分:1)
像这样使用SerialPort的ReadTimeout
SerialPort Port = new SerialPort()
//Define baudrate and so on
Port.ReadTimeout = 1000;
现在你可以通过等待答案来获得TimeoutException。
Port.Write(Request);
try
{
//waiting for an answer
Port.ReadByte();
}
catch (TimeoutException)
{
//No answer until timeout
}