1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
| public class GpsDecoder
{
private delegate ValidGpsPosition GetValidPositionDelegate(int timeout);
public ValidGpsPosition GetValidPosition(int timeout)
{
...
}
public IAsyncResult BeginGetValidPosition(int timeout, AsyncCallback callback)
{
GetValidPositionDelegate dlg = GetValidPosition;
return dlg.BeginInvoke(timeout, callback, dlg);
}
public ValidGpsPosition EndGetValidPosition(IAsyncResult asyncResult)
{
if (asyncResult == null)
{
throw new ArgumentNullException("asyncResult");
}
GetValidPositionDelegate dlg = asyncResult.AsyncState as GetValidPositionDelegate;
if (dlg == null)
{
throw new NullReferenceException("dlg");
}
return dlg.EndInvoke(asyncResult);
}
} |