/// <summary>invoke snippet method</summary> /// <param name="assemblyHashCode"></param> /// <param name="methodInfo"></param> /// <param name="parameters"></param> /// <returns></returns> public static Object InvokeSnippetMethod(int assemblyHashCode, MethodBase methodInfo, Object[] parameters) { try { if (IsGuiThreadExecution(assemblyHashCode)) { GuiInteractive guiUtils = new GuiInteractive(); return(guiUtils.ReflectionInvoke(methodInfo, null, parameters)); } else { return(methodInfo.Invoke(null, parameters)); } } catch (Exception e) { if (e is TargetInvocationException && e.InnerException != null) { throw e.InnerException; } else { throw e; } } }
/// <summary>create a type</summary> /// <param name="type"></param> /// <param name="constructorInfo"></param> /// <param name="parameters"></param> /// <returns></returns> public static Object CreateInstance(Type type, ConstructorInfo constructorInfo, Object[] parameters) { try { if (InvokeRequired(null, type)) { GuiInteractive guiUtils = new GuiInteractive(); return(guiUtils.ReflectionInvoke(constructorInfo, type, parameters, (constructorInfo == null))); } else { if (constructorInfo != null) { return(constructorInfo.Invoke(parameters)); } else //default constructor { return(type.Assembly.CreateInstance(type.FullName)); } } } catch (Exception e) { if (e is TargetInvocationException && e.InnerException != null) { throw e.InnerException; } else { throw e; } } }
/// <summary>Set Property</summary> /// <param name="propInfo"></param> /// <param name="o"></param> /// <param name="index"></param> /// <param name="value"></param> public static void SetPropertyValue(PropertyInfo propInfo, Object o, object[] index, Object value) { try { Object castedValue = DynCast(value, propInfo.PropertyType); if (InvokeRequired(o, propInfo.ReflectedType)) { GuiInteractive guiUtils = new GuiInteractive(); guiUtils.ReflectionSet(propInfo, o, index, castedValue); } else { propInfo.SetValue(o, castedValue, index); } } catch (Exception e) { if (e is TargetInvocationException && e.InnerException != null) { throw e.InnerException; } else { throw e; } } }
/// <summary>call method</summary> /// <param name="methodInfo"></param> /// <param name="value"></param> /// <param name="parameters"></param> /// <param name="alwaysGuiThread">if true,executed in GUI thread</param> /// <returns></returns> public static Object InvokeMethod(MethodBase methodInfo, Object obj, Object[] parameters, bool alwaysGuiThread) { try { if (InvokeRequired(obj, methodInfo.ReflectedType, alwaysGuiThread)) { GuiInteractive guiUtils = new GuiInteractive(); return(guiUtils.ReflectionInvoke(methodInfo, obj, parameters)); } else { return(methodInfo.Invoke(obj, parameters)); } } catch (Exception e) { if (e is TargetInvocationException && e.InnerException != null) { throw e.InnerException; } else { throw e; } } }
/// <summary>Get Property</summary> /// <param name="propInfo"></param> /// <param name="o"></param> /// <param name="index"></param> /// <returns></returns> public static Object GetPropertyValue(PropertyInfo propInfo, Object o, object[] index) { try { if (InvokeRequired(o, propInfo.ReflectedType)) { GuiInteractive guiUtils = new GuiInteractive(); return(guiUtils.ReflectionInvoke(propInfo, o, index)); } else { return(propInfo.GetValue(o, index)); } } catch (Exception e) { if (e is TargetInvocationException && e.InnerException != null) { throw e.InnerException; } else { throw e; } } }
/// <summary> /// Show Dialog /// </summary> public virtual DialogResult openDialog() { DialogResult result = DialogResult.None; if (!Misc.IsGuiThread()) { // always execute dialog opening code in GUI thread GuiInteractive guiUtils = new GuiInteractive(); result = guiUtils.openDialog(this); } else { #if !PocketPC //Create dummy form and pass it as owner, //otherwise while running through F7 dialog is not displayed var dummyForm = GuiUtilsBase.createDummyForm(); dummyForm.Visible = false; GuiCommandQueue.getInstance().GuiThreadIsAvailableToProcessCommands = false; result = _form.ShowDialog(dummyForm); dummyForm.Close(); #else GuiCommandQueue.getInstance().GuiThreadIsAvailableToProcessCommands = false; result = _form.ShowDialog(); #endif } return(result); }
/// <summary> /// Creates dialog for passed type of object by calling objects constructor matching the parameters /// </summary> /// <param name = "objType">type of object whose constructor to be invoked</param> /// <param name = "parameters">parameters to be passed to objects constructor</param> public void createDialog(Type objType, Object[] parameters) { if (!Misc.IsGuiThread()) { // always execute dialog creation code in GUI thread GuiInteractive guiUtils = new GuiInteractive(); guiUtils.createDialog(this, objType, parameters); } else { ConstructorInfo[] constructors = objType.GetConstructors(); foreach (ConstructorInfo constructor in constructors) { // TODO : We actually need to check the parameter type also // but currently there is no such situation so lets not // make this code more complex. if (constructor.GetParameters().Length == parameters.Length) { _form = (Form)constructor.Invoke(parameters); break; } } } }
/// <summary>Get field</summary> /// <param name="fieldInfo"></param> /// <param name="o"></param> /// <returns></returns> public static Object GetFieldValue(FieldInfo fieldInfo, Object o) { if (InvokeRequired(o, fieldInfo.ReflectedType)) { GuiInteractive guiUtils = new GuiInteractive(); return(guiUtils.ReflectionInvoke(fieldInfo, o, null)); } else { return(fieldInfo.GetValue(o)); } }
/// <summary> /// dispose(and close) the dialog /// </summary> public virtual void closeDialog() { if (!Misc.IsGuiThread()) { // always execute dialog closing code in GUI thread GuiInteractive guiUtils = new GuiInteractive(); guiUtils.closeDialog(this); } else { _form.Close(); } }
/// <summary>Set field</summary> /// <param name="fieldInfo"></param> /// <param name="o"></param> /// <param name="value"></param> public static void SetFieldValue(FieldInfo fieldInfo, Object o, Object value) { Object castedValue = DynCast(value, fieldInfo.FieldType); if (InvokeRequired(o, fieldInfo.ReflectedType)) { GuiInteractive guiUtils = new GuiInteractive(); guiUtils.ReflectionSet(fieldInfo, o, null, castedValue); } else { fieldInfo.SetValue(o, castedValue); } }
/// <summary> /// /// </summary> /// <param name="propInfo"></param> /// <param name="guiMgControl"></param> /// <param name="index"></param> /// <param name="value"></param> public static void SetPropertyValue(PropertyInfo propInfo, GuiMgControl guiMgControl, object[] index, Object value) { GuiInteractive guiUtils = new GuiInteractive(); guiUtils.ReflectionSet(propInfo, guiMgControl, index, value); }