2011-03-23 8 views
3

양식을 지속적으로 업데이트하는 비동기 소켓에서 일부 정보가 수신되었다고 가정합니다 (일부 백그라운드 스레드가 종료 됨). 양식을 닫을 때 가끔 throw되는 ObjectDisposedException을 피할 수 있도록 양식 콘텐츠를 안전하게 업데이트 할 수 있습니까?백그라운드 스레드에서 양식을 계속 업데이트합니다.

백그라운드 스레드에서 수행되는 업데이트 작업에서 양식의 속성 IsDisposed를 확인하지만 UI 스레드가 검사 직후 및 예외를 초래하는 업데이트 작업 직전에 양식을 폐기하기 때문에 유용하지 않습니다. (폼을 닫을 때) 양식의 "onScreenFormClosed"핸들러에서 폼 객체에 대한 잠금을 사용하려고 시도했으며 업데이트 작업에서 이러한 작업이 동시에 실행되지 않도록하기 위해 UI 스레드를 차단했습니다.

UI 스레드에서 업데이트 작업을 실행하려고 시도했지만 폼에서 Invoke (...)를 호출해도 여전히 ObjectDisposedException이 throw되었습니다.

+0

예외를 잡을 수없는 이유가 있습니까? – steinar

+0

솔루션에 대한이 질문을보십시오. [http://stackoverflow.com/questions/3565551/c-winforms-threading-closed-form-gets-invoked](http://stackoverflow.com/questions/3565551)/c-winforms-threading-closed-form-gets-invoked) – openshac

답변

0

백그라운드 스레드를 생성하는 클래스를 변경할 수 있습니까? 나는 그들이 폼의 적절한 이벤트를 감시하고 폼이 업데이트 정보의 시작 부분에서 닫혔는지 확인해야한다.

C#은 이벤트 및 대리자를 사용하여 관찰자 및 관찰 가능 패턴을 구현하지만 관찰중인 개체 만 업데이트되는 횟수는 중요하지 않습니다.

http://social.msdn.microsoft.com/Forums/en-US/csharplanguage/thread/11b46013-089b-44ca-907a-6dab05c5b454/

0

나는 다음을 수행하여이 문제를 처리 : 그들은 작업을 중지 할 것, 그래서 나는 백그라운드 스레드에 "우리가 종료된다"명령을 보낸 UI 양식의으로 onClose 이벤트에서

한 다음 백그라운드 스레드를 닫을 수 있도록 UI 스레드를 잠시 동안 잠자기 상태로 만들면 나에게 적합하지만 모든 상황에 적용되지 않을 수 있습니다.

관련 문제