Как создать словарь обработчиков событий - PullRequest
0 голосов
/ 28 июня 2018

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

У меня есть несколько потоков, ожидающих события "Отмена". Но событие Cancel содержит ключ (algoIdent), который позволяет мне перенаправить обратный вызов в определенный поток.

Я хочу использовать словарь с ключом algoIdent и значением моего делегата CallBack.

Однако я не знаю, как создать новый экземпляр события (я не имею в виду добавление слушателя). Закомментированный код показывает, как я делаю это для одного слушателя, но я не знаю, что поместить в часть значения словаря.Add ():

public delegate void delProcessCancel(string algoIdent,  string callBackMessage);
//public event delProcessCancel ProcessCancelListeners;
public Dictionary<string, delProcessCancel > ProcessCancelListenerDict = new Dictionary<string, delProcessCancel>();

        public void AddProcessCancelListener(string algoIdent, delProcessCancel _delProcessCancel)
        {
            if (!ProcessCancelListenerDict.ContainsKey(algoIdent))
            {                    
                ProcessCancelListenerDict.Add(algoIdent, event _delProcessCancel );
            }
            else
            {

            }
        }

1 Ответ

0 голосов
/ 28 июня 2018

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

Кто-нибудь чувствует, что есть проблема в этом?

  public class ProcessCancelEventWrapper
    {
        public event delProcessCancel ProcessCancelListeners;

        public ProcessCancelEventWrapper(delProcessCancel _delProcessCancel)
        {
            ProcessCancelListeners += _delProcessCancel;
        }

        public void Raise(string algoIdent, string callBackMessage)
        {
            ProcessCancelListeners(algoIdent, callBackMessage);
        }
    }

    public delegate void delProcessCancel(string algoIdent,  string callBackMessage);

    public Dictionary<string, ProcessCancelEventWrapper> ProcessCancelListenerDict = new Dictionary<string, ProcessCancelEventWrapper>();


    public enum ListenerOption { Add, Delete, };
    public void ManageProcessCancelListener(string algoIdent, delProcessCancel _delProcessCancel, ListenerOption listenerOption)
    {
        if (listenerOption==ListenerOption.Add)
        {
            if (!ProcessCancelListenerDict.ContainsKey(algoIdent))
            {
                ProcessCancelListenerDict.Add(algoIdent, new ProcessCancelEventWrapper(_delProcessCancel));
            }
            else
            {
                ProcessCancelListenerDict[algoIdent].ProcessCancelListeners += _delProcessCancel;
            }                
        }
        else if (listenerOption == ListenerOption.Delete)
        {
            if (!ProcessCancelListenerDict.ContainsKey(algoIdent))
            {
            }
            else
            {
                ProcessCancelListenerDict[algoIdent].ProcessCancelListeners -= _delProcessCancel;
            }
        }

    }

    public void RaiseProcessCancelListener(string algoIdent, string callBackMessage)
    {
        if (!ProcessCancelListenerDict.ContainsKey(algoIdent))
        {
        }
        else
        {
            ProcessCancelListenerDict[algoIdent].Raise(algoIdent, callBackMessage);
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...