как очистить дескрипторы событий в C # - PullRequest
1 голос
/ 20 июня 2010

Я использую глобальную переменную с именем "client"

Например

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 += / -+"

Ответы [ 3 ]

6 голосов
/ 20 июня 2010

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

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

2 голосов
/ 20 июня 2010

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

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
0 голосов
/ 20 июня 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...