Я должен написать DLL, которая отправляет сообщение и ждет ответа, прежде чем он может продолжаться.
Пока это часть мая dll:
public async Task<bool> WaitForRxThread(int TimeOut)
{
bool res = await Task.Run(() => WaitForResult(TimeOut));
return res;
}
private bool WaitForResult(int TimeOut)
{
_Result = new byte[0];
int counter = 0;
double WaitTimeout = TimeOut + DateTime.Now.TimeOfDay.TotalMilliseconds;
while (!(DateTime.Now.TimeOfDay.TotalMilliseconds >= WaitTimeout))
{
counter++;
int BytesToRead = sPort.BytesToRead;
if (BytesToRead > 0)
{
byte[] Bytes = new byte[BytesToRead];
sPort.Read(Bytes, 0, BytesToRead);
Array.Resize(ref _Result, _Result.Length + BytesToRead);
Array.Copy(Bytes, 0, _Result, (_Result.Length - BytesToRead), BytesToRead);
if (ResultComplete(Bytes) == true)
{
return true;
}
}
}
return false;
}
public bool ResultComplete(byte[] TestData)
{
if (TestData.Length > 4)
{
return true;
}
else
{
return false;
}
}
Для проверки этой DLL я написал консольное приложение, например
static void Main(string[] args)
{
RS obj = new RS();
obj.OpenComport();
obj.SendMessage("Hello");
Console.WriteLine("Message send");
var result = obj.WaitForRxThread(5000);
Console.WriteLine("Read thread executed");
result.Wait();
Console.WriteLine("Process result");
if (result.Result)
{
obj.GetResult();
Console.WriteLine("Result is : " + Encoding.ASCII.GetString(obj.GetResult()));
Console.WriteLine("Done");
Console.ReadLine();
}
else
{
Console.WriteLine("Result is false");
}
obj.CloseComport();
}
Когда я запускаю это приложение и отправляю данные этому приложению в течение периода ожидания, я ничего не обнаруживаю. BytesToRead равно 0. Когда я устанавливаю точку останова на линии
var result = obj.WaitForRxThread(5000);
Отправить данные в приложение и продолжить я получаю данные, как ожидалось
Может кто-нибудь объяснить, что я делаю не так?