문제

UI 스레드 (winforms)에 객체를 심어주는 문제가 있습니다. 이 객체 생성은 아마도 매우 오래 걸릴 것입니다. 그리고 나는 그 방법에 대한 일종의 "타임 아웃"을 원합니다 (내 앱을 차단하기 때문에).

내가 가진 문제는 다음과 같습니다. 1. 객체는 UI 스레드에서 생성되어야합니다.

그래서 누군가가 창의적인 아이디어를 가지고 있다면, 시간 초과에 도달하면 실행 방법을 중지하는 논리를 만들 수 있다면?

티아 마틴

도움이 되었습니까?

해결책

여기에 나쁜 해결책이 있습니다. 타이머의 작업자 스레드를 사용하여 UI 스레드를 모니터링하십시오. 객체가 생성되기 전에 타이머가 경과하면 작업자 스레드를 호출하십시오. Abort UI 스레드에서. 이것은 a를 올릴 것입니다 ThreadAbortException UI 스레드에서 잡아야합니다. 이것이 나쁜 이유는 예외가 제기 될 때의 미묘한 타이밍 및 레이스 조건에 따라 프로그램이 매달려 있거나 충돌 할 수 있기 때문입니다.

"더 안전한"방법은 작업자에게 전화를하는 것입니다. Interrupt - 이것은 a를 올릴 것입니다 ThreadInterruptedException UI 스레드에서는 WaitSleepJoin 상태 - 실이 잠들지 않으면 방해받지 않지만 최소한 메모리가 매달려 있거나 부패하지 않습니다.

다른 팁

설마; 특히 소스에 액세스 할 수없는 경우

가능하더라도 합당한 이유없이 강제 코드를 강제로 인터럽트하는 것은 좋은 생각이 아닙니다. 문제가 발생할 수 있습니다 (누출, 잠금 잠금 장치 등).

그것은 같은 UI 스레드? 이 코드를 소유하기 위해 두 번째 UI 스레드를 스폰 할 수 있습니까? 그것은 얻는다 작은 멍청하지만 작동 할 수 있습니다.

TeginInvoke를 사용하는 경우 IASYNCRESULT 비 UI 스레드에서 대기 할 수있는 대기 핸들이 있습니다.

불행히도 타임 아웃시 시작을 취소 할 수있는 깨끗한 방법은 없습니다. 1800 INFORMATION솔루션.

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