1
У меня есть этот код для установки параметров элементов управления в другой поток:с # Установка/Получение свойств элементов управления в/из другого потока
private delegate void SetPropertySafeDelegate<TResult>(System.Windows.Forms.Control @this, Expression<Func<TResult>> property, TResult value);
public static void SetProperty<TResult>(this System.Windows.Forms.Control @this, Expression<Func<TResult>> property, TResult value)
{
var propertyInfo = (property.Body as MemberExpression).Member as PropertyInfo;
if (propertyInfo == null || [email protected]().IsSubclassOf(propertyInfo.ReflectedType) || @this.GetType().GetProperty(propertyInfo.Name, propertyInfo.PropertyType) == null)
{
throw new ArgumentException("The lambda expression 'property' must reference a valid property on this Control.");
}
if (@this.InvokeRequired)
{
@this.Invoke(new SetPropertySafeDelegate<TResult>(SetProperty), new object[] { @this, property, value });
}
else
{
@this.GetType().InvokeMember(propertyInfo.Name, BindingFlags.SetProperty, null, @this, new object[] { value });
}
}
это работает так:
label1.SetProperty(() => label1.Text, "xxx");
но мне это нужно для работы также по другим вопросам, таким как:
checkBox4.SetProperty(() => checkBox4.Checked, true);
который не работает.
Вторая вещь, в которой я нуждаюсь, - это такая же функция для получения контрольного значения.
Большое спасибо за ваш совет.