0 / 0 / 0
Регистрация: 10.11.2009
Сообщений: 6
1

Сохранение информации о подписчиках события и удаление отдельных подписчиков

08.05.2010, 14:11. Показов 996. Ответов 0
Метки нет (Все метки)

Доброго всем дня!

Помогите со следующей проблемой.

У меня есть некоторый объект, который подписывается на различные события используя просто лямбда-выражения, обрабатывающие события.

Возникла задача – разом отписать всех подписчиков объявленных внутри этого объекта от всех событий и разом.

Я пытаюсь сделать некий унифицированный статистический объект который будет «знать» какой объект к чему подписывался в случае если подписка проходила через его метод и в результате иметь возможность удалить эти подписки потом разом.

Т.е. я хочу сделать что-то в духе кода ниже, но не понимаю, как в общем виде сохранять ссылки на событие и действие что бы потом можно было отписать одно от другого. Возможно надо делать как-то вообще по другому.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
    class Program {
 
        static void Main(string[] args) {
 
            var EventSender = new EventSender();
            var EventReceiver = new EventReceiver(EventSender);
 
            EventSender.Invoke(" some var ");
 
            LinkSaver.RemoveEvent(EventReceiver); // ??
 
            Console.ReadKey();
 
        }
    }
 
 
    public class ObjLink{
        public object Event;
        public object Action;
    }
 
    public static class LinkSaver {
 
        public static void SetEvent<T>(object obj, Action<T> Event, T Action) {
            Event(Action);
            var objLink = new ObjLink{Event = Event, Action = Action};
            if (!Links.ContainsKey(obj)) Links.Add(obj, new List<ObjLink>{objLink});
            else Links[obj].Add(objLink);
        }
 
        static Dictionary<object,List<ObjLink>> Links = new Dictionary<object, List<ObjLink>>();
 
        public static void RemoveEvent(object obj){
            foreach(var objLink in Links[obj]){
                 // objLink.Event -= objLink.Action; ???
            }
        }
    }
 
    public class EventReceiver {
 
        public EventReceiver(EventSender obj) {
            LinkSaver.SetEvent<EventSender.TestDelegate>(this, obj.SetEvent, str => Console.WriteLine(str + " test event!"));
        }
    }
 
 
    public class EventSender {
 
        public void Invoke(string var) {
            if (eventTest != null) eventTest(var);
        }
 
        public void SetEvent(TestDelegate Action) {
            eventTest += Action;
        }
 
        public delegate void TestDelegate(string var);
 
        private event TestDelegate eventTest;
 
        // by the way
        public void RemoveFromEvent() {
            foreach (var handler in eventTest.GetInvocationList())
                eventTest -= (TestDelegate)handler;
        }
 
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.05.2010, 14:11
Ответы с готовыми решениями:

Проверка подписчиков события в классе потомка
Уважаемые, у меня есть небольшая проблема связанная с тем, что я в C# еще зеленые newbie. Меня...

Сохранение редактированной информации, добавление и удаление из таблиц на сайте ПХП
Доброго времени суток. У меня такая проблема. Есть задание сделать страницу в которой будет в...

Добавить к программе след действия: Сохранение и загрузка информации в текст. файл. Сохранение и загрузка информации в типизированный файл.
Помогите добавить к программе след действия: Сохранение и загрузка информации в текст. файл....

Редактирование информации в базе, в частности, отдельных ячеек
Здравствуйте! Тема наверно поднималась не раз, но найти решения так и не смог вывожу данные из...

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
08.05.2010, 14:11
Помогаю со студенческими работами здесь

QwtPlot удаление отдельных кривых
Доброго времени суток, суть загвоздки в том, что внутри класса в мой QwtPlot добавляются кривые: ...

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

Работа со строками. Удаление отдельных символов
Есть проблемка: нужно написать программу, которая бы удаляла те слова, в которых есть цифры. Вот...

Сохранение в отдельных файлах всех фрагментов текста из текстового файла, ограниченных определёнными символами
Доброго дня! Просьба помочь написать батник. Есть текстовый файл который необходимо разбить на...

Как из числа типа double сделать int (сохранение целой и дробной части в отдельных целочисленных переменных)
Например есть число double d = 123.4567 Как сделать что бы int i1 = 123; int i2 =4567;

сохранение информации
Всем привет помогите пожалуйста!!!(((я хочу чтоб с textbox или RichTextBox в документ Это я...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru