zoukankan      html  css  js  c++  java
  • 线程间操作控件

    
    delegate void bindvalue(object Instance, string Property, object value);
    delegate object invokemethod(object Instance, string Method, object[] parameters);
    delegate object invokepmethod(object Instance, string Property, string Method, object[] parameters);
    delegate object invokechailmethod(object InstanceInvokeRequired, object Instance, string Method, object[] parameters);

    /// <summary>
    /// 委托设置对象属性
    /// </summary>
    /// <param name="Instance">对象</param>
    /// <param name="Property">属性名</param>
    /// <param name="value">属性值</param>
    private void SetValue(object Instance, string Property, object value)
    {
    if ((bool)GetPropertyValue(Instance, "InvokeRequired"))
    {
    bindvalue d
    = new bindvalue(SetValue);
    this.Invoke(d, new object[] { Instance, Property, value });
    }
    else
    {
    SetPropertyValue(Instance, Property, value);
    }
    }
    /// <summary>
    /// 委托执行实例的方法
    /// </summary>
    /// <param name="Instance">类实例</param>
    /// <param name="Method">方法名</param>
    /// <param name="parameters">参数列表</param>
    /// <returns>返回值</returns>
    private object InvokeMethod(object Instance, string Method, object[] parameters)
    {
    if ((bool)GetPropertyValue(Instance, "InvokeRequired"))
    {
    invokemethod d
    = new invokemethod(InvokeMethod);
    return this.Invoke(d, new object[] { Instance, Method, parameters });
    }
    else
    {
    return MethodInvoke(Instance, Method, parameters);
    }
    }
    /// <summary>
    /// 委托执行实例的方法
    /// </summary>
    /// <param name="InstanceInvokeRequired">窗体控件对象</param>
    /// <param name="Instance">需要执行方法的对象</param>
    /// <param name="Method">方法名</param>
    /// <param name="parameters">参数列表</param>
    /// <returns>返回值</returns>
    private object InvokeChailMethod(object InstanceInvokeRequired, object Instance, string Method, object[] parameters)
    {
    if ((bool)GetPropertyValue(InstanceInvokeRequired, "InvokeRequired"))
    {
    invokechailmethod d
    = new invokechailmethod(InvokeChailMethod);
    return this.Invoke(d, new object[] { InstanceInvokeRequired, Instance, Method, parameters });
    }
    else
    {
    return MethodInvoke(Instance, Method, parameters);
    }
    }
    /// <summary>
    /// 委托执行实例的属性的方法
    /// </summary>
    /// <param name="Instance">类实例</param>
    /// <param name="Property">属性名</param>
    /// <param name="Method">方法名</param>
    /// <param name="parameters">参数列表</param>
    /// <returns>返回值</returns>
    private object InvokePMethod(object Instance, string Property, string Method, object[] parameters)
    {
    if ((bool)GetPropertyValue(Instance, "InvokeRequired"))
    {
    invokepmethod d
    = new invokepmethod(InvokePMethod);
    return this.Invoke(d, new object[] { Instance, Property, Method, parameters });
    }
    else
    {
    return MethodInvoke(GetPropertyValue(Instance, Property), Method, parameters);
    }
    }
    /// <summary>
    /// 获取实例的属性值
    /// </summary>
    /// <param name="ClassInstance">类实例</param>
    /// <param name="PropertyName">属性名</param>
    /// <returns>属性值</returns>
    private static object GetPropertyValue(object ClassInstance, string PropertyName)
    {
    Type myType
    = ClassInstance.GetType();
    PropertyInfo myPropertyInfo
    = myType.GetProperty(PropertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
    return myPropertyInfo.GetValue(ClassInstance, null);
    }
    /// <summary>
    /// 设置实例的属性值
    /// </summary>
    /// <param name="ClassInstance">类实例</param>
    /// <param name="PropertyName">属性名</param>
    private static void SetPropertyValue(object ClassInstance, string PropertyName, object PropertyValue)
    {
    Type myType
    = ClassInstance.GetType();
    PropertyInfo myPropertyInfo
    = myType.GetProperty(PropertyName, BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Public);
    myPropertyInfo.SetValue(ClassInstance, PropertyValue,
    null);
    }

    /// <summary>
    /// 执行实例的方法
    /// </summary>
    /// <param name="ClassInstance">类实例</param>
    /// <param name="MethodName">方法名</param>
    /// <param name="parameters">参数列表</param>
    /// <returns>返回值</returns>
    private static object MethodInvoke(object ClassInstance, string MethodName, object[] parameters)
    {
    if (parameters == null)
    {
    parameters
    = new object[0];
    }
    Type myType
    = ClassInstance.GetType();
    Type[] types
    = new Type[parameters.Length];
    for (int i = 0; i < parameters.Length; ++i)
    {
    types[i]
    = parameters[i].GetType();
    }
    MethodInfo myMethodInfo
    = myType.GetMethod(MethodName, types);
    return myMethodInfo.Invoke(ClassInstance, parameters);
    }
  • 相关阅读:
    # bootstrap Grid System 柵格系统中“移动优先”的一个小体现[bootstrap ]
    ENGLISH HANDWRITING
    #PHP 类的多继承实现之 traits.md
    #linux vscode 保存总提示“Retry as sudo”
    #【php留存问题-2020年6月19日】,手动为数组添加一个间隔元素,再遍历的时候,提示索引为空
    #Linux 下 Xampp的安装与Hello World
    # 详细了解HTML5中的form表单
    # Promise的简单理解和基本使用
    #简单理解回调函数
    Java中几种常见的设计模式--工厂设计模式
  • 原文地址:https://www.cnblogs.com/lscy/p/1986022.html
Copyright © 2011-2022 走看看