Я пишу простое приложение клиент-сервер.На стороне клиента я установил одноэлементный экземпляр класса, чтобы сделать все взаимодействие с сервером.Когда приходят новые сообщения, я сохраняю их в коллекции, а затем запускаю событие.Любые формы, которые открыты и подписаны на событие, затем получат сообщение и обработают его.
Моя проблема заключается в том, что если форма открывается после получения сообщений, как я могу отправить ей ранее полученные сообщения?и подписаться на новые, не пропуская ни одного сообщения, или получая одно дважды?
Код формы
private void Form_Load(object sender, EventArgs e)
{
handleMsgRec = new EventHandler<MsgEventArgs>(MsgReceived);
Comm.Instance.LoadMsgs(Msgs);
Comm.Instance.MsgReceived += handleMsgRec;
}
Код связи с сервером
private static ReaderWriterLockSlim rw = new ReaderWriterLockSlim();
public void LoadMsgs(List<MsgObject> msgs)
{
rw.EnterReadLock();
Messages.ForEach(f => msgs.Add(f));
rw.ExitReadLock();
}
изменить: я не думаю, что яобъяснил себя достаточно хорошо.Я уже храню все сообщения, которые я получаю.Меня беспокоит то, что между тем, как я загружаю сообщения и подписываюсь на событие, может появиться новое сообщение, которое я пропущу.Или, если я сначала подпишусь на событие, а затем загрузлю сообщения, то получу сообщение дважды.