если у вас есть асинхронный метод, вы можете использовать
public async Task SendCommandAsync()
{
SendCommandToServer();
bool haveAnswer = false;
await Task.Delay(5000);
haveAnswer = IsAnwerHere();
if (!haveAnswer) {/* after 5 secs still no answer from server*/}
}
В случае метода синхронизации (и если вы не хотите останавливать поток вызывающего абонента)
public void SendCommandSync()
{
SendCommandToServer();
bool haveAnswer = false;
Task.Delay(5000).ContinueWith(t =>
{
haveAnswer = IsAnwerHere();
if (!haveAnswer) {/* after 5 secs still no answer from server*/}
});
}
Метод синхронизации с остановкойнить вызывающей стороны
public void SendCommandSync()
{
SendCommandToServer();
bool haveAnswer = false;
Thread.Sleep(5000);
haveAnswer = IsAnwerHere();
if (!haveAnswer) {/* after 5 secs still no answer from server*/}
}
UPD
В вашем случае это может быть что-то вроде
private async void Check_ReceivedAnswer(string expectedA, string receivedA, PictureBox box)
{
await Task.Delay(5000);
if (receivedA.Contains(expectedA))
box.BackColor = Color.Green;
//Checked1 = false;
}
ИЛИ даже у васможно ждать в функции вызова
private async void DataReceivedHandler(object sender, SerialDataReceivedEventArgs e)
{
int bytes = COMport.BytesToRead;
byte[] buffer = new byte[bytes];
COMport.Read(buffer, 0, bytes);
SetText(ASCIIEncoding.ASCII.GetString(buffer));
if (Checked1)
{
await Task.Delay(5000);
if (CheckBox_Port_CommandCheck_1.Checked)
Check_ReceivedAnswer(ASCIIEncoding.ASCII.GetString(buffer), TextBox_ExpectedAnswer_1.Text, PictureBox_Reply_1);
if (CheckBox_Port_CommandCheck_2.Checked)
Check_ReceivedAnswer(ASCIIEncoding.ASCII.GetString(buffer), TextBox_ExpectedAnswer_2.Text, PictureBox_Reply_2);
}
}