져니
409
2019-03-27 14:30:02
1
468

Dispatcher.BeginInvoke 안에 구현한 Action이 두 번 실행되는데 이유가 뭘까요?


C# 개발자입니다. 설명하려니 생각보다 어렵네요.. 그치만 최대한 열심히 설명해 보겠습니다.ㅠㅠ 도와주세요..

일단 지금 제가 보고 있는 프로그램은 주 프로세스가 하나있고, 주 프로세스에서 생성한 프로세스가 한 개 더 있습니다.

주 프로세스에서 쓰레드를 하나 생성하고 그 쓰레드 안에서 나머지 프로세스와 주 프로세스가 IPS 통신을 하는 방식인데요.

나머지 프로세스에서 파일 생성이 완료되면 파일에 대한 정보를 주 프로세스에 보내고, 주 프로세스가 그 파일에 대한 정보를 리스트에 집어넣어야 합니다.

주 프로세스가 정보를 받아오는 것 까지는 문제가 없습니다. 정보를 리스트에 넣는 기능이 Dispatcher.BeginInvoke 안에 구현되어 있는데, 문제는 이게 두 번 실행되서 리스트 안에 두번 들어갑니다.

평소에는 문제가 없는데, 윈도우 환경이 불안정 하거나 디버그 모드에서 Dispatcher.BeginInvoke 안에 break point를 걸었을 때 이런 문제가 발생하네요. thread 관련 문제인 것 같긴 한데 정확한 이유를 모르겠네요..쓰레드는 한 번만 만들어지고, 주 프로세스의 쓰레드 내부 외는 다른 데서 호출되는 것도 없습니다.. 어디서부터 접근해야 할까요?

0
  • 답변 1

  • 이설란
    3k
    2019-03-27 15:55:48

    정확한 사정은 모르겠지만 일반적으로 스레드를 사용할 때

    한 스레드가 작업을 완료하면 notify()메소드를 호출해서

    일시 정지 상태에 있는 다른 스레드를 실행 대기 상태로 만들고,

    자신은 두번 작업을 하지 않도록 wait()메소드를 호출하여 일시 정지 상태로 만들죠


  • 로그인을 하시면 답변을 등록할 수 있습니다.