문제

C#에서는 이벤트가 동기식입니다.내 기본 양식이 스트림을 수신하는 루프가 있는 스레드를 시작하는 이 애플리케이션이 있습니다.스트림에 무언가가 나타나면 루프에서 기본 양식으로 이벤트가 시작됩니다.

기본 양식이 느리거나 메시지 상자 등을 표시하면 루프가 일시 중지됩니다.이 문제를 해결하는 가장 좋은 방법은 무엇입니까?콜백을 사용하고 기본 양식을 호출합니까?

도움이 되었습니까?

해결책

흠, 당시에 필요한 것이 무엇인지에 따라 다양한 시나리오를 사용했습니다.

거의 다 왔기 때문에 BeginInvoke가 코딩하기 가장 쉬울 것이라고 생각합니다.어느 쪽이든 이미 Invoke를 사용하고 있어야 하므로 BeginInvoke로 변경하면 됩니다.별도의 스레드에서 콜백을 사용하면 BeginInvoke를 사용하는 것과 동일한 작업을 수행합니다(스레드 풀을 사용하여 콜백을 대기열에 추가하는 한).

다른 팁

양식을 사용하고 있으므로 더 쉬운 방법은 배경작업자 요소.

BackgroundWorker 클래스를 사용하면 별도의 전용 스레드에서 작업을 실행할 수 있습니다.다운로드 및 데이터베이스 트랜잭션과 같은 시간 소모적 인 작업은 사용자 인터페이스 (UI)가 실행 중에 응답을 중단 한 것처럼 보일 수 있습니다.반응 형 UI를 원하고 그러한 작업과 관련된 긴 지연에 직면하면 BackgroundWorker 클래스는 편리한 솔루션을 제공합니다.

이벤트는 바로 대표자, 이므로 BeginInvoke를 사용하세요.(보다 .NET 환경에서 비동기 메서드 호출 만들기)

이미 자세히 설명한 대로 몇 가지 옵션이 있지만 내 경험에 따르면 대리자와 BeginInvoke를 떠나 대신 BackgroundWorker(v2.0+)를 사용하는 것이 더 낫습니다. 스레드 완료 시 기본 양식.전체적으로 매우 훌륭하게 구현된 솔루션을 찾았습니다.

System.ComponentModel.BackgroundWorker 정말 좋은 출발점이 됩니다.비동기 작업을 수행하고 중요한 이벤트에 대한 알림을 제공하며 양식과 더 잘 통합할 수 있는 방법을 제공합니다.

예를 들어 ProgressChanged 이벤트에 대한 처리기를 등록하여 진행률 알림을 활성화할 수 있습니다.(장시간의 비동기 프로세스가 있고 사용자가 애플리케이션이 멈췄다고 생각하는 것을 원하지 않는 경우 적극 권장됩니다)

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top