public static EvaluationResult GetProperty(Thread thread, TargetPropertyInfo property,
TargetStructObject instance, EvaluationFlags flags,
int timeout, out string error, out TargetObject result)
{
error = null;
RuntimeInvokeResult rti;
try {
RuntimeInvokeFlags rti_flags = RuntimeInvokeFlags.VirtualMethod;
if ((flags & EvaluationFlags.NestedBreakStates) != 0)
rti_flags |= RuntimeInvokeFlags.NestedBreakStates;
rti = thread.RuntimeInvoke (
property.Getter, instance, new TargetObject [0], rti_flags);
if (!rti.CompletedEvent.WaitOne (timeout, false)) {
rti.Abort ();
result = null;
return EvaluationResult.Timeout;
}
if ((rti.TargetException != null) &&
(rti.TargetException.Type == TargetError.ClassNotInitialized)) {
result = null;
error = rti.ExceptionMessage;
return EvaluationResult.NotInitialized;
}
if (rti.Result is Exception) {
result = null;
error = ((Exception) rti.Result).Message;
return EvaluationResult.UnknownError;
}
result = (TargetObject) rti.ReturnObject;
if (rti.ExceptionMessage != null) {
error = rti.ExceptionMessage;
return EvaluationResult.Exception;
} else if (rti.ReturnObject == null) {
rti.Abort ();
return EvaluationResult.UnknownError;
}
return EvaluationResult.Ok;
} catch (TargetException ex) {
result = null;
error = ex.ToString ();
return EvaluationResult.UnknownError;
}
}