我正在使用两个扩展来处理UI元素上的调用命令,这些扩展适用于this thread等:
public static void InvokeIfRequired(this Control control, Action<Control> action)
{
if (control.InvokeRequired)
control.Invoke(new Action(() => action(control)));
else
action(control);
}
public static T InvokeIfRequired<T>(this Control control, Func<T> func) where T: IConvertible
{
if (control.InvokeRequired)
return (T)Convert.ChangeType(control.Invoke(func), typeof(T));
else
return (T)Convert.ChangeType(func, typeof(T));
}
这些工作符合预期
Button1.InvokeIfRequired(x => x.Enabled = false;
int newrow = DataGridView1.InvokeIfRequired(() => DataGridView1.Rows.Add());
当我需要从异步方法调用它们时。
但是,我想知道是否有一种方法可以进一步自动执行InvokeIfRequired方法-当我在控件上设置属性而不必在代码中显式调用InvokeIfRequired时,是否有一种方法可以触发InvokeIfRequired?
就像,如果我只是键入
Button1.Enabled = true;
有没有办法解决Set事件或control属性,以便在设置.Enabled属性时在后台调用InvokeIfRequired?还是我想把马车放到马前面,然后变得太聪明了?