отключение окна ожидания кредитной карты от устройства чтения кредитных карт - PullRequest
0 голосов
/ 07 июля 2011

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

Поскольку доступно 4-5 типов читателей, я реализую шаблон стратегии для CardReader.

Я также хотел бы отделить код создания / проверки CardReader от кода окна. Можете ли вы дать советы для того же.

Я буду читать ваши комментарии до разработки класса шаблона стратегии для CardReader.

Спасибо

1 Ответ

1 голос
/ 07 июля 2011

Чтобы в конструкторе окна ожидания требовалась ссылка на класс считывателя, зарегистрируйте окно ожидания для OnCardReadEvent.Когда событие получено, вызовите функцию внутри класса считывателя, чтобы проверить его, затем при необходимости продолжите отображать окно ожидания или закройте его.При закрытии окна отмените регистрацию в OnCardReadEvent

Если у вас нет OnCardReadEvent, создайте его.

Внутри класса считывателя, когда чтение завершено, сделайте что-то подобное, чтобы позволить нескольким окнам получатьданные из одного считывателя

DCardArrived _evnt = OnCardArrived; /*presumably declared event*/
         Delegate[] _iList;
         DCardArrived _Invoker;
         if (_evnt != null)
         {
             _iList = _evnt.GetInvocationList();
             for (int i = 0; i < _iList.Length; i++)
             {
                  //You could also use BeginInvoke
                 _Invoker = (DCardArrived)_iList[i];
                 _Invoker.Invoke(this/*Sender*/,CardData/*class that inherits EventArgs containing the data either informing just the window to close or not or with the data for further processing*/);
             }
         }

Вы не дали нам много работы :)

...