.NET (C#)의 이벤트에 대한 질문이 있습니다. 백그라운드 작업을 실행하는 여러 상황에 대한 코드를 작성해야하고 주 스레드 또는 컨트롤러 클래스에 작업 완료 또는 파일 복사 완료와 같은 문제가 발생했음을 알리고 싶습니다. 백그라운드 스레드가 주 스레드의 델리게이트가 이벤트를 처리 할 때까지 기다릴 수 있습니다.이벤트 리스너가 실행되기를 기다리지 않고 어떻게 이벤트를 시작할 수 있습니까?
메시지 전달과 같은 작업을 수행하고 싶습니다. 메시지를 보내지 만 누가 그 메시지를 처리하는지 신경 쓰지 않습니다. 예를 들어
:
클래스가 순서대로 몇 개의 프로세스 하나씩 처리에 기록된다. 각 프로세스는 백그라운드 스레드에서 실행해야합니다. 작업이 완료되면 이벤트가 시작되고 컨트롤러에 완료되었음을 알립니다 (OnCompleted() 메서드 사용).
문제는 컨트롤러의 이벤트 처리기를 사용하여 후속 프로세스를 시작하면 이전 프로세스의 OnComplete 메서드는 모든 프로세스가 완료 될 때까지 호출 스택에 남아 있습니다 (실행을 완료하지 않음).
그런 상황에서 백그라운드 작업이 스택에서 이벤트 발생 메서드를 유지하지 않고 작업이 완료되었다는 것을 컨트롤러 클래스에 어떻게 알릴 수 있습니까?
예제 2 : 백업 프로그램.
각 파일을 대상에 복사하기위한 백그라운드 스레드가 실행됩니다. 배경이 이면 UI에 복사 된 마지막 파일 인을 알릴 필요가 있지만 UI가 업데이트 될 때까지 기다릴 필요가 없습니다. 대신에, "BTW, 여기에 정보가 있습니다. 이제 다시 일하러 가자." 이벤트 수신기는 이벤트 발생 자의 처리를 차단해서는 안됩니다.
가 어떻게한다는 점에서 C#을 할 것 코딩 asyn의 다른 기술을 말한다? –
음, 다른 스레드를 시작하는 방법을 알고있는 것 같습니다. 첫 번째 이벤트 리스너가이 작업을 수행하도록하십시오. (이벤트를 사용하여 객체를 생성하자마자 –