我在整个代码中都有这些。这是一款WP7 Silverlight应用程序。将事件和委托事件处理程序传递到泛型Helper方法
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。
如果我转到定义在RadioButton.Checked或Button.Click的2010 VS它们都是同一类型:
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);
}
与编译错误出现:
Operator '+=' cannot be applied to operands of type 'System.EventHandler' and UIControlHandler
Cannot implicitly convert type UIControlHandler' to 'System.EventHandler'
任何人都可以帮助指向正确的方向吗?这真让我抓狂。
完全摆脱这个UIThreadExecutor,订阅事件可以在工作线程上完成。尽管这样做非常不寻常,很难理解为什么你需要这个。 –
这不太对 - 将ButtonControl.Click事件分配给事件处理程序ButtonClickHandler,事件处理程序分配给事件不是相反的 – sll