protected T GetServiceProperty <T>(Func <T> getCmd, T defaultValue , ActivityMessageTypes messageType = ActivityMessageTypes.Status , [System.Runtime.CompilerServices.CallerMemberName] string propName = "???") { T retval = defaultValue; Exception xcp = null; CheckDevice(); try { retval = getCmd(); } catch (Exception ex) { xcp = ex; string name = ex.GetType().Name; } if (xcp == null) { if (retval is ArrayList) { LogActivityStart(messageType, "Get {0}: {1}", propName, retval); StringBuilder sb = new StringBuilder(); ArrayList list = retval as ArrayList; foreach (var item in list) { sb.Append((sb.Length > 0) ? ", " : ""); sb.Append(item.ToString()); } LogActivityEnd(messageType, sb.ToString()); } else if (retval is TrackingRates) { LogActivityStart(ActivityMessageTypes.Parameters, "Get {0}:", propName); StringBuilder sb = new StringBuilder(); TrackingRates rates = retval as TrackingRates; if (rates == null) { sb.Append(" Did not return expected ITrackingRates collection!"); } else if (rates.Count == 0) { sb.Append("Received invalid Tracking Rates collection."); } else { for (int i = 1; i <= rates.Count; ++i) { if (sb.Length > 0) { sb.Append(", "); } sb.Append(rates[i].ToString()); } } LogActivityEnd(ActivityMessageTypes.Parameters, sb.ToString()); } else { LogActivityLine(messageType, "Get {0}: {1}", propName, retval); } } else { LogActivityLine(messageType, "Get {0} Exception: {1}", propName, xcp.Message); } Exceptions.SetException(propName, xcp); return(retval); }