Чтобы в конструкторе окна ожидания требовалась ссылка на класс считывателя, зарегистрируйте окно ожидания для 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*/);
}
}
Вы не дали нам много работы :)