오늘 정말 희한한 현상을 겪게 되었습니다. 그게 뭐냐하면 바로 C#의 Main단에서 Try-Catch 구문을 걸었는데 제대로 Catch가 걸리지 않았던 것이죠. 그 때는 참 황당했습니다. 왜냐구요? Visual Studio.Net을 C++개발자 타입으로 설정하였을 때, 디버그 모드로 프로세스를 실행하면 Catch까지 잘 걸리는데, 단독 프로세스로 실행했을 경우엔 Catch에 제대로 걸리지 않더군요. Application.Run 내부적으로 처리하는 것 같았습니다.
코드는 대충 위와 같았습니다. Program.cs 에서 Application.Run으로 폼을 표시하고 내부적으로 메시지 펌핑(?)을 하게 될거라 생각을 한 후, Form1에서는 고의적으로 익셉션을 발생시키게 하였습니다. 여기서 바로 문제가 발생합니다. 어떤 거냐구요? Debug 모드로 실행을 한 번 해보시고, 단독 모드로 실행을 한 번 해보십시오. 단독으로 실행을 하면 C#의 기본 Exception MessageBox(?)가 뜰거에요. 절대 메시지 박스가 뜨지 않습니다. 그래서 결국 구글링을 하다가 찾게 된 페이지에서 하나의 해결책을 발견하고 적용시켜보니 제대로 작동이 되었습니다.
찾은 코드를 한 번 적용 시켜 보겠습니다. 그럼 Program.cs에 존재하는 코드에 한 줄이 추가됩니다.
Application.SetUnhandledExceptionMode를 ThrowException으로 설정하도록 하니 단독 모드에서도 테스트 Catch 메시지 박스 코드가 존재하는 Catch가 걸립니다. 아마도 추측하기론 Run 내부에서 Try-Catch를 설정하는 듯도 보이는 군요. 30분 정도 이 것때문에 삽질을 하긴 했지만 다음에 이런 일이 발생했을 때는 아주 유용할 것이라 생각합니다.^^
Java한참 쓰면서.. C#이 Java랑 비슷할거라 생각을 했었는데 여엉 이상하넹 -_-;
예를 들어
lblBankName.Text = (String)dr["bankname"];
이런식으로.. Getter, Setter 도 잘 사용안하고 ToString() 이런거 안쓰고 (String)으로 type을 바꾼다거나 ["bankname"] 처럼 이상한 형식으로 배열을 사용한다거나 -_-; 암튼 구질구질 허구만...
자바였다면
lblBankName.SetText(dr.getString("bankname"); 이런식으로 코딩 했겠지
예외는 아직 많이 안써봐서 좀 더 써보고 평가 해 볼 수 있을듯 함.
댓글을 달아 주세요
오~ 꽤나 괜찮은 정보네~
블로그의 질이 갈수록 높아지는구나 @0@)/~ 홧팅이다~
헉 @0@.. 질이 높아지는것 같지는 않아용 ㄷㄷㄷ
그래도 존내 올려야죵 ㅋㅋ
뭐냐뇽 ㅡ_ㅡ;
오작동 미워요;
ㅋㅋ 나도 몰라염 나도 미워용
C# 예외처리 찾다가 다시 오게 되는구만 ㅋ
그나전 C# 쓰면 쓸수록 뭔가 이상하노 -_-; 내가 아직 적응을 못한건감...
무엇이 말이삼??
java 에서 checked-exception 인가??
throw 로 지정하는거 그건 안되지 싶어 ㅋㅋ
전체는 그냥 Exception 으로 받아서 하면 될거고..
Exception을 Inherit 받아서 override 해줌 너만의 Exception 이 되지 않을까..
Java한참 쓰면서.. C#이 Java랑 비슷할거라 생각을 했었는데 여엉 이상하넹 -_-;
); 이런식으로 코딩 했겠지
예를 들어
lblBankName.Text = (String)dr["bankname"];
이런식으로.. Getter, Setter 도 잘 사용안하고 ToString() 이런거 안쓰고 (String)으로 type을 바꾼다거나 ["bankname"] 처럼 이상한 형식으로 배열을 사용한다거나 -_-; 암튼 구질구질 허구만...
자바였다면
lblBankName.SetText(dr.getString("bankname"
예외는 아직 많이 안써봐서 좀 더 써보고 평가 해 볼 수 있을듯 함.