У меня есть это по всему моему коду. Это приложение WP7 Silverlight.
UIThreadExecutor.UIThreadExec.Execute(() => buttonControl.Click +=
new RoutedEventHandler(this.ButtonClickHandler));
Итак, приведенный выше код в потоке пользовательского интерфейса, присваивающем событие buttonControl.Click
обработчику событий ButtonClickHandler .. например:
public void ButtonClickHandler(object sender, System.Windows.RoutedEventArgs e)
{
}
То, что я хотел бы, это рефакторинг:
UIThreadExecutor.UIThreadExec.Execute(() => buttonControl.Click +=
new RoutedEventHandler(this.ButtonClickHandler));
в единый статический, но универсальный вспомогательный метод, способный указывать любое событие управления пользовательским интерфейсом и обработчик события. Затем метод соединит их вместе, используя класс UIThreadExecutor.
Конечно, buttonControl также может быть любым элементом управления пользовательским интерфейсом - с разными событиями одного типа. Например, это может быть RadioButton с событием Checked.
Если я перейду к определению в 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 '
Может кто-нибудь помочь направить меня в правильном направлении? Это сводит меня с ума.