Skip to content

Instantly share code, notes, and snippets.

@clausjoergensen
Created November 1, 2011 10:35
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save clausjoergensen/1330280 to your computer and use it in GitHub Desktop.
Save clausjoergensen/1330280 to your computer and use it in GitHub Desktop.
public static Task<byte[]> WaitData(this SerialPort serialPort, TimeSpan timeout, byte[] request)
{
var tcs = new TaskCompletionSource<byte[]>();
SerialDataReceivedEventHandler handler = null;
Timer timer = null;
handler = (sender, e) =>
{
var package = serialPort.ReadPackage();
if (package.SequenceEqual(request) == false)
{
tcs.TrySetResult(package);
serialPort.DataReceived -= handler;
timer.Dispose();
}
};
timer = new Timer(sender =>
{
tcs.TrySetResult(null);
serialPort.DataReceived -= handler;
timer.Dispose();
}, null, (int)timeout.TotalMilliseconds, Timeout.Infinite);
serialPort.DataReceived += handler;
return tcs.Task;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment