2010-06-17 6 views
0

내 C# 프로젝트에는 다섯 개의 양식이 있습니다. 한 호스트는 계속해서 실행하고 싶은 httplistener입니다. 리스너가 메시지를 받으면이를 정적 클래스에 전달하고 정적 클래스는 다시 다른 처리를 위해 적절한 양식을 호출합니다.다른 스레드에서 양식 실행

정적 클래스가 새 스레드에서 새 양식을 호출 할 가능성이 있습니까? 그렇다면 나를 도와주세요.

+1

어떤 형태입니까? Windows Forms? 웹 양식? WPF 양식? 세금 양식? –

+0

기본 폼 스레드의 컨트롤 만 재생합니다. 이는 WinForms 및 WPF (실제로는 스윙)에 적용됩니다. 필요에 따라 올바른 스레드로 마샬링하십시오 (답변 참조). 윌리 니티 액세스는 일반적으로 "크로스 스레딩"예외 및 기타 "나쁜 물건"을 초래합니다. –

+0

은 vs2005를 사용하고 winforms를 호출합니다. – Smith

답변

1

양식의 코드는 양식의 시각적 측면 만 처리해야합니다. 다른 것들, 특히 http 리스너는 백그라운드 스레드에서 실행되는 별도의 클래스로 처리되어야합니다.

+0

백그라운드 스레드에서 http listener를 실행하는 방법을 알려주십시오. – Smith

+0

@Smith : 백그라운드 스레드 또는 http 리스너를 실행하는 것에 대해 묻고 있습니까? – Rox

+0

이것은 내가하고 싶은 것입니다 "배경 스레드에서 실행되는 별도의 클래스로 처리해야합니다." – Smith

1

"양식 호출"은 아무 것도 아니지만 Show() 만하고 싶을 것입니다. 작업자 스레드에서 양식을 만드는 것은 결코 좋은 생각입니다. 스레드 상태 (STA 및 메시지 루프)가 올바르더라도 Z-order 및 modality 문제는 해결하기 어렵습니다.

Control.Invoke를 사용하여 UI 스레드에서 코드를 실행하기 만하면됩니다. 폼을 만들고 Show() 메서드를 호출해야합니다.

+0

추가 참고 사항 : 때때로 유용 할 SychronizationContext 및 친구도 있습니다. –

0

한스 대변인은 권장하지 않을 수도 있지만 필요한 경우 어떤 스레드에서든 System.Windows.Forms.Application.Run()으로 전화 할 수 있습니다. 당신이하는 경우에 조심하고 당신이하고있는 무슨을 아십시오.

관련 문제