我的代码中都有这些。这是一个 WP7 Silverlight 应用程序。
UIThreadExecutor.UIThreadExec.Execute(() => buttonControl.Click +=
new RoutedEventHandler(this.ButtonClickHandler));
所以,上面的代码,在UI线程上分配buttonControl.Click
事件处理程序 ButtonClickHandler .. 例如:
public void ButtonClickHandler(object sender, System.Windows.RoutedEventArgs e)
{
}
我想要的是重构:
UIThreadExecutor.UIThreadExec.Execute(() => buttonControl.Click +=
new RoutedEventHandler(this.ButtonClickHandler));
到单个静态但通用的帮助器方法中 - 能够指定任何 UI 控件事件和事件处理程序。然后该方法将使用 UIThreadExecutor 类将两者挂钩。
当然,buttonControl 也可以是任何 UI 控件 - 具有相同类型的不同事件。例如 - 它可以是带有 Checked 事件的 RadioButton。
如果我转到 VS 2010 中 RadioButton.Checked 或 Button.Click 的定义,它们都是同一类型:
public event RoutedEventHandler Checked;
我一直为这件事摸不着头脑。我想,在我的静态助手中 - 声明一个委托(在命名空间级别声明):
public delegate void UIControlHandler(object sender, RoutedEventArgs e);
然后我的辅助方法如下所示:
public static void SubscribeToUIEvent(EventHandler eventToSubscribeTo,
UIControlHandler handler)
{
UIThreadExecutor.UIThreadExec.Execute(() => eventToSubscribeTo += handler);
}
这会出现编译错误:
运算符“+=”不能应用于类型的操作数
“System.EventHandler”和 UIControlHandler
无法将类型 UIControlHandler' 隐式转换为 'System.EventHandler'
谁能帮我指出正确的方向?这真让我抓狂。