2013-07-30 3 views
2

최근에 VS 2012로 업그레이드되었습니다. VS 2010에서 코드화 한 코딩 된 UI 테스트 세트가 있고 VS 2012에서이를 회전하려고합니다. AssemblyInitialize 특성을 사용하여 테스트를 시작할 때 표시 할 창 형식입니다. 이 양식을 사용하여 사용자가 값 집합에서 선택하도록 허용하고 그 값은 테스트에 데이터를 공급하는 데 사용됩니다. 여기에, 그래서Windows Form이 디버그 모드로 표시되지 않습니다

[AssemblyInitialize] 
public static void AssemblyInitialize(TestContext context) 
{ 
    ProcessUtility.TerminateAll(); 
    if (!File.Exists(Directory.GetCurrentDirectory() + @"\RunInfo.ser")) 
    { 
     InitializeForm initForm = new InitializeForm(); 
     initForm.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; 
     initForm.ShowDialog(); 
    } 
} 

을 내 두통입니다 : 여기에 양식을 표시 내 코드의 복사본입니다 실행 모드에서 양식 표시가 잘. 그러나 디버그 모드에서 스핀 업하려고 시도하면 절대로 표시되지 않습니다. 코드를 살펴 보았습니다. 그것은 오류없이 양식에 대한 모든 컨트롤을로드하고 있습니다. 나는 그것을 'initForm.ShowDialog()'코드 행으로 만든다. 해당 코드 행을 실행하지만 아무 일도 일어나지 않습니다. 오류가 발생하지 않고 IDE 왼쪽 하단의 상태가 '준비'입니다. 마치 IDE가 양식이 표시되었다고 생각하는 것처럼 보이지만 그렇지 않습니다. 작업 관리자를 두 번 확인했는데 그곳에 있지 않습니다. 빌드 구성이 디버그로 설정되어 있는지 확인했습니다. 나는 해결책을 청소하고 재건축을 시도했다. 이 코드는 VS 2010에서 계속 작동합니다. 아이디어가 없기 때문에 비슷한 문제가있는 사람이 있다고 말해주세요. 난 stackoverflow에 새로운 그래서 내가 더 잘 문제를 설명하기 위해 제공 할 수있는 다른 경우 알려 주시기 바랍니다. 사전에 검토해 주셔서 감사합니다.

+0

당신은 그 양식에 .Dispose()를 호출해야합니다. 문제는 수정하지 않지만 여전히 필요합니다. – user1132959

답변

1

대부분의 가능성이 예외가 초기화하는 동안 무슨 일이 일어나고의 Debug->Exceptions 드롭 다운 메뉴에 가서 Common Language Runtime Exceptions에 대한 thrown이 선택되어있는 체크 박스는, 이런 일이 예외에 코드 휴식을 드릴 것입니다해야합니다.

enter image description here

여전히 예외가 다음 Enable Just My Code에 대한 확인란의 선택을 취소 Debug->Option and Settings로 이동 Break when exceptions cross AppDomain or managed/native boundries

enter image description here

의 확인란을 잡는하지 않는 경우이 당신에게 "읽기 청어"를 제공 할 수 있습니다 일부 .NET 프로세스는 흐름 논리를 제어하기 위해 예외를 사용하므로 예외가 발생합니다. 따라서 처음 보는 예외가 문제의 원인이 아닐 수도 있습니다.

+0

귀하의 책임에 대해 감사드립니다. CLR 예외를 throw하고 두 개의 디버깅 설정을 권장대로 변경했습니다. 불행히도 예외는 발생하지 않았습니다. 나는 initForm.ShowDialog()를 통해 단계; 코드 줄 및 여전히 그냥 응답하지 .... 예외 및 양식을 표시하지 않습니다. 다른 아이디어? 도와 주셔서 정말 고맙습니다. 이것은 나를 미치게 만든다. – user2635491

+0

내가 제안 할 수있는 유일한 다른 점은 Visual Studio의 "출력"창을 주시하는 것입니다. 때로는 "첫 번째 예외 예외"가 어딘가에서 발견되어보고 시작할 수있는 장소를 줄 수 있다고 말할 수 있습니다. –

+0

다시 한 번 감사드립니다. ShowDialog 대신 Application.Run을 사용하여 작업 할 수있었습니다. 이것은 ShowDialog에 문제가 생긴 유일한 시간입니다. 아 글쎄, 양식이 지금 표시됩니다. – user2635491

1

ShowDialog 대신 다음 코드를 사용하여 양식을 표시 할 수있었습니다. 나는 아직도 ShowDialog를 작동하지 않는 이유를 아무 생각하지만,이 트릭을 수행합니다

InitializeForm initForm = new InitializeForm(); 
initForm.Visible = true; 
initForm.Focus(); 
Application.Run(initForm); 
0
포함 컨테이너 방법 위에 [STAThread] 속성을 추가하여 상황을 오래된 코드를 디버깅 및 해결 동안이 같은 일을 경험하고 있었다

예를 들어 form.ShowDialog(); :이 하나를 해결했다

[STAThread] 
public void MessageBoxShow(string errorMessage) 
{ 
    using (frmError errorForm = new frmError(errorMessage)) 
    { 
     errorForm.ShowDialog(); 
    } 
} 

는 동안 타격-계속 디버그 포인트를 발생 매달려. 플랫폼 Windows 7 x64 엔터프라이즈 버전 및 VS2008 (둘 다 현재 최신 업데이트 있음)

희망이 도움이됩니다.

업데이트 1 : Windows.Form 외에도 IDisposable을 상속하는 사용자 지정 양식을 사용하고 있으므로 사용자 지정 처분 루틴이 있으므로 예제에서는 using 문을 무시하십시오. 혼란이 생겨서 죄송합니다.

0

왜이 솔루션이 작동하는지 잘 모르지만 VS2013에서 ShowDialog를 호출하기 전에 표시하려고하는 폼의 visible 속성을 true로 설정 한 다음 false로 설정하여이 문제를 해결할 수있었습니다.

VB.Net 예제 코드

Dim form as Form = new Form 
form.Visible = True 
form.Visible = False 
form.ShowDialog 
관련 문제