2011-03-18 5 views
1

C# 프로그램에서 2 개의 창 양식 응용 프로그램을 만들었습니다. 나는 이것을했다 :C# windows form app

Application.Run(new Form1()); 
Application.Run(new Form2()); 

두 번째 형태는로드되지 않는다. 왜? 이 문제를 어떻게 해결할 수 있습니까? 나는이 두 양식을 동시에 활성화하고 싶습니다. 이 양식 응용 프로그램은 각각 다른 메소드를로드합니다. 나는 어떻게 든이 형태들 각각에 대해 병렬 처리를 만들고 싶습니다.

해결 방법 및 문제점 : 2 개의 스레드에 대해 2 개의 폼을 생성했습니다. 이 양식은 상위 양식을 호출합니다. 문제는 부모 폼에 폼의 요소를 계속 추가하고자하는 벡터가 있다는 것입니다. 스레드가 다시 활성화 될 때마다 벡터가 다시 초기화된다는 것을 알았습니다. 이걸 어떻게 바꿀 수 있니?

답변

3

Application.Run이 (가) 차단되어 있기 때문입니다. 현재 스레드에서 응용 프로그램을 실행 중입니다. 각각의 Application.Run 명령 중 하나를 사용하여 별도의 스레드 두 개를 시작해야합니다.

가장 좋은 방법은 두 스레드 중 하나를 별도 스레드로 여는 것입니다.

+0

2 개의 스레드를 만들었습니다. 이 양식은 상위 양식을 호출합니다. 문제는 paretn 양식에 양식의 요소를 연속적으로 추가하려는 벡터가 있다는 것입니다. 스레드가 다시 활성화 될 때마다 벡터가 다시 초기화된다는 것을 알았습니다. 이 일을 어떻게 바꿀까요? – elisa

+0

죄송합니다. 스레드 간 통신에 대해 많은 경험이 없습니다. –

0

난 당신이 달성하기 위해 노력하고 있지만, 가까운 첫 번째 양식과 두 번째 뜻이 실행 방법을이 때까지 제어를 반환 didnt가 있기 때문에 당신은 두 번째를 참조 didnt는 :-)

을 표시 이해할 수없는 정말이야 귀하의 경우 작업 개체를 닫습니다 Forms1

4

Application.Run은 응용 프로그램을 시작하고 응용 프로그램 시작시로드해야하는 창 (즉, 어떤 창이 기본 창이어야하는지)을 나타내는 데 사용됩니다. 두 번째 양식을 표시하려면 Application.Run을 사용하지 말고 손으로 표시해야합니다.

var form = new Form2(); 
form.Show(); 

이 코드는 Form1의 생성자 또는 이벤트에 대한 응답으로 배치 할 수 있습니다. Application.Run을 호출하는 동일한 메서드에서 Form1 창을 ​​닫을 때까지이 메서드가 더 이상 실행되지 않으므로이 메서드를 만들지 못할 수 있습니다. 아마도 Forms1의 생성자는이 작업을 수행하는 가장 좋은 장소입니다.

+0

나를 이길 수 있습니다 : http://msdn.microsoft.com/en-us/library/ms157902(v=VS.90).aspx – HadleyHope

1
Application.Run(new Form1()); 

이렇게하면 Form1이 호출되며이 양식이 닫힐 때까지 대기합니다. 그 후 두 번째 Run 메서드가 호출됩니다.

권장되는 방법은 Application.Run을 사용하고 윈폼 응용 프로그램을 시작하지만, 나는이 규칙보다 규칙의 더 의심 :

Application.Run은

1

adrianbanks' answer here를 참조 동기 방법이다. Application.Run을 사용하는 가장 큰 이유는 여러 넌 모달 폼을 열고 싶을 때입니다. 다음을 사용하여이 작업을 수행 할 수 있습니다.

new Form().Show(); 
new Form().Show(); 
Application.Run(); 
+0

이 경우 응용 프로그램 프로세스가 종료되지 않는다는 것을 잊어 버렸습니다. 양식이 닫히지 만 정말 유용한 방법입니다. –