2008-10-21 7 views
3

MDI의 각 자식마다 별도의 GUI 스레드가있는 C# MDI 응용 프로그램이 가능합니까?다중 GUI 스레드가있는 mdi 응용 프로그램

예를 들어 자식 양식 중 하나가 일부 동기 요청에 의해 차단되면 전체 컨테이너 (MDI 상위)가 고정되고 다른 열린 창도 액세스 할 수있게됩니다.

일반적으로 .net Windows 형태의 응용 프로그램 도메인에 둘 이상의 GUI 스레드가있을 수 있습니까?

Visual Studio에서 기본 winform 응용 프로그램에는 STA (단일 스레드 아파트) 설정이 있습니다. 이론적으로 나는 무엇을 MTA 여기에 의미하지만 그것을 실제로 사용하는 이해합니다.

개인용 mdi 자식이 비동기 방식으로 차단 호출을 연기 할 수없는 다양한 팀에 의해 개발되었으므로 여러 UI 스레드를 가질 수 있는지 궁금합니다. .

편집 # 1 :

I 개별 탭이 별도의 프로세스가 전용 GUI 스레드와 아마 인 예로서 구글 크롬 브라우저 생각할 수

? dot.net 앱에서 과 같은 기능을 사용하고 있습니다.

답변

2

GUI 계층에 여러 스레드를 강제 실행하지 말고 GUI 계층이 모든 작업을 백그라운드 스레드로 연기하도록하십시오. 그 방법은 일부 백그라운드 스레드가 응답하지 않는 경우 응답하지 않는 백그라운드 스레드를 반영하는 MDI 하위를 포함하여 전체 GUI가 응답합니다.

+1

동의 함. GUI가 하나의 전용 스레드에서 실행되도록 작업을 리팩터링하는 것이 더 좋으며 작업이 완료되면 기본 스레드로 콜백하는 작업자 스레드에 백그라운드 작업이 할당됩니다. –

+0

개인용 mdi 자식이 비동기 방식으로 차단 호출을 연기 할 수없는 다양한 팀에 의해 개발되었으므로 여러 UI 스레드를 가질 수 있는지 궁금합니다. – dotnetcoder

+2

이것은 항상 충분하지 않습니다. 일부 컨트롤은 그리기와 같은 UI 무거운 짐을 수행해야 할 수도 있으며, UI 컨트롤을 분리하여 동시에 그릴 수 있습니다. 귀하의 대답은 좋은 지침 일 수는 있지만 질문에 대답하지는 않습니다. 나는 그들 자신의 UI 쓰레드로 그들을 분리하는 것이 가능하다는 것을 안다, 나는 그것 자신의 애플 리케이션에서 일하고있다. 그러나 특정 제어 메시지에 관해서는 몇 가지 문제에 부딪치고있다. – PatTech

0

아니오. .NET에서는 여러 UI 스레드를 사용할 수 없습니다. 백그라운드 스레드를 사용하여 시간이 많이 드는 작업을 처리하는 것이 좋습니다. 작업이 실행되는 동안 창을 차단해야하는 경우 몇 가지 대안을 만드는 것이 좋습니다.

+0

개인용 mdi 자식은 비동기식으로 블로킹 호출을 연기 할 수없는 여러 팀에 의해 개발되었으므로 다중 UI 스레드를 가질 수 있는지 궁금합니다. – dotnetcoder

+0

Google 크롬 브라우저는 개별 탭이 전용 GUI 스레드가있는 개별 프로세스 인 예를 생각할 수 있습니까? 닷넷 앱 – dotnetcoder

+0

에서 이런 일이 가능합니까? 이것은 사실이 아닙니다. UI 스레드는 스레드 선호도를 가지므로 다른 스레드의 요청을 마샬링해야합니다. 여러 개의 UI 스레드를 만드는 것을 멈출 수있는 방법은 없습니다 (수행중인 것을 알고있는 한) – RichardOD