간단한 클라이언트 서버 응용 프로그램을 작성하는 중입니다. 클라이언트 측에서는 서버와의 모든 통신을 수행하기 위해 클래스의 싱글 톤 인스턴스를 설정했습니다. 새 메시지가 들어 오면 컬렉션에 저장 한 다음 이벤트를 시작합니다. 열린 상태이고 이벤트 에 가입 한 양식은 메시지를 수신하고 처리합니다.목록을로드하고 이벤트에 등록하는 적절한 방법
내 문제는 메시지를받은 후 양식을 열면 이전에받은 메시지를 보내고 메시지를 누락하거나 두 번 가져 오지 않고 새로운 메시지를 구독하는 방법입니다.
양식 코드
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();
}
편집 : 나는 나 자신을 충분히 설명 같아요. 이미받은 모든 메시지를 저장하고 있습니다. 내 관심사는 내가 메시지를로드하고 이벤트에 가입 할 때까지 내가 놓칠 새로운 메시지가 들어올 수 있다는 것이다. 또는 먼저 이벤트에 가입 한 다음 메시지를로드하면 메시지를 두 번받을 수 있습니다.
"C#"과 같이 제목 앞에 접두사를 사용하지 마십시오. 그것이 우리가 태그를 가지고있는 것입니다. –
이전에받은 메시지를 어딘가에 저장하십시오. 귀하의 메인 폼 또는 별도의 클래스 예를 들어. –