线程间操作控件


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);
}

你可能感兴趣的:(线程)