3

데이터를 수신/전송하고 클라이언트를 수신하기 위해 클래식 소켓과 스레드를 사용하는 클라이언트 - 서버 애플리케이션이 있습니다.폼이 어떻게 든 처리됩니다.

응용 프로그램이 잘 작동하지만 어떤 임의의 시간 이후 나는 얻을 경우 ObjectDisposedException :

그 코드는 클라이언트 소켓 스레드에서 호출 난의 코드를 실행할 수 호출() 방법을 사용한다
System.ObjectDisposedException: Cannot access a disposed object. 
Object name: 'MainForm'. 
    at System.Windows.Forms.Control.MarshaledInvoke(Control caller, Delegate method, Object[] args, Boolean synchronous) 
    at System.Windows.Forms.Control.Invoke(Delegate method, Object[] args) 
    at System.Windows.Forms.Control.Invoke(Delegate method) 

UI 스레드.

양식을 수동으로 처리하거나 사용하지 말아야합니다. Close() (양식은 닫기 버튼을 클릭하여 닫힙니다), 폐기 처분의 원인이 무엇인지 모르겠습니다.

편집 : 예외 폼 폐쇄시 발생 아니다 - 그것은 완전히 무작위로 발생합니다.

+0

이 문제에 대한 해결책을 찾았습니까? 양식이 없어도 비슷한 문제가 있습니다. 아니면 1 년 전과 같이 기억하십니까? :) 그렇지 않다면 문제 없습니다. – M3NTA7

+0

아니, 문제가 무엇인지 기억이 안납니다. 그러나, 나는 문제가 내 코드 내에 있었기 때문에 폼이 처리되도록 만들었다. 그래서 기본적으로 내 솔루션을 귀하의 문제에 적합하지 않을 것입니다. 코드를 자세히 살펴보고 (물론 디버깅을 통해) 범인을 찾아야합니다. – mnn

답변

1

Dispose 메서드를 재정의하고 중단 점을 넣으려고 했습니까? 콜 스택 (callstack)은 아마도 당신에게 왜/어디에서 처분되고 있는지를 알려줄 것입니다.

0

비슷한 문제가있어서 양식을 숨기고 닫거나 절대로 처리하지 못했습니다. 형태의 근본 원인이 배치되어

때문에 실제로 닫기 양식을 강요 한 후, 처분이 암시 적이었다 취소 버튼의 DialogResult를이었다.

이 문제를 해결하기 위해 양식에서 DialogResult를 제거했습니다.

+0

비록 내가 기억하지 못한다고해도, 그 원인은 무엇입니까 (그래서 나는 정말로 대답을 선택할 수 없거나 스스로를 쓸 수 없습니다), 다른 사람들은 그것을 사용할 것입니다. 그래서 대답에 감사드립니다. – mnn

관련 문제