public string Learn(CodeFormat codeFormat, LearnCodeModifier learnCodeFormat,
uint forcedFrequency, TimeSpan timeout)
{
CheckDisposed();
if (timeout < TimeSpan.Zero) {
throw new ArgumentOutOfRangeException("timeout", "timeout cannot be negative");
}
using (var results = new SyncLearnResults()) {
LearnCompleted += ManagedWrapper_LearnCompleted;
try {
LearnAsync(codeFormat, learnCodeFormat, forcedFrequency, results);
if (TimeSpan.Zero == timeout) {
results.WaitEvent.WaitOne();
return results.LearnCompletedEventArgs.Code;
}
else if (results.WaitEvent.WaitOne(timeout, false)) {
if (null != results.LearnCompletedEventArgs.Error) {
throw results.LearnCompletedEventArgs.Error;
}
else if (results.LearnCompletedEventArgs.Cancelled) {
return null;
}
return results.LearnCompletedEventArgs.Code;
}
else {
LearnAsyncCancel(results);
return null;
}
}
finally {
LearnCompleted -= ManagedWrapper_LearnCompleted;
}
}
}