2010-06-20 2 views
1

Я использую глобальную переменную с именем «клиент»как очистить событие ручки в C#

Например

client.getPagesCompleted += (s, ee) => 
{ 
    pages = ee.Result; 
    BuildPages(tvPages.Items, 0); 
    wait.Close(); 
}; 
client.getPagesAsync(cat.MainCategoryID); 

Мне нужно очистить обработчики для getPagesCompleted и установить другой обработчик.
Как легко очистить ручки?
Я знаю client.getPagesCompleted-=new EventHandler(...). Но это очень сложно. Мне нужен простой способ. Я использую client.getPagesCompleted=null, но ошибка показана. "only use +=/-+"

ответ

0

Сохраните объект события в переменной и используйте -= для отмены подписки.

6

Единственный способ удалить обработчик событий - использовать конструкцию -= с тем же обработчиком, который вы добавили через +=.

Если вам нужно добавить и удалить обработчик, вам необходимо закодировать его в именованном методе, используя анонимный метод/делегат.

2

Вам не нужно размещать обработчик событий в отдельном методе; вы все равно можете использовать свою лямбда-функцию, но вам нужно назначить ее переменной-делегату. Что-то вроде:

MyEventHandler handler = (s, ee) => 
{ 
    pages = ee.Result; 
    BuildPages(tvPages.Items, 0); 
    wait.Close(); 
}; 

client.getPagesCompleted += handler; // Add event handler 
// ... 
client.getPagesCompleted -= handler; // Remove event handler 
Смежные вопросы