2011-11-11 3 views
2

http://www.dotnetspark.com/kb/1867-create-tab-control-wpf.aspx에 대한 자습서를 따라 WPF 응용 프로그램의 닫을 수있는 탭을 만들었습니다.새 스레드의 시작 탭, 탭 및 끝 스레드 닫기

멀티 스레드 응용 프로그램을 만들고 있는데 위 링크에서 닫을 수있는 탭을 사용하고 있습니다. 나는 각 스레드가 자신의 탭을 가지고 그것을 실행하는대로 업데이트하고 싶습니다. 새 스레드 내부에서 탭을 만들거나 주 스레드에서 탭을 만들어 새 스레드에서 업데이트해야합니까? 이 일을하는 올바른 방법은 무엇입니까?

탭 닫을 때 어떻게 스레드 끝낼 수 있습니까?

감사합니다.

답변

1

탭을 렌더링/표시하려면 UI 스레드를 사용해야합니다. this link (archive)을 참조하십시오. 제목에서 "Dispatcher로보다 반응이 빠른 앱 만들기"라고 말합니다.

1

아니요. 주 스레드가 탭을 만들고, 다른 여러 스레드가 지시 할 때 탭을 업데이트하고, 탭이 닫힐 때 스레드가 종료되도록 명령하십시오.

use the dispatcher 스레드 조정 방법에 대해 알아보십시오.

스레드가 프로그램 논리에 따라 해당 작업을 수행하지 않아야하는 작업을 수행하면 스레드 코드가 손상됩니다. 고쳐. 탭이 닫힐 때 스레드가 계속 실행되지 않아야하는 경우 탭을 닫을 때 스레드가 계속 실행되지 않도록 코드를 작성하십시오. 스레드를 깨뜨린 채로 두지 말고, 프로그램 로직에 의해 작업이 수행되어서는 안되며, 다른 곳에서 문제를 해결하려고 할 때 작업하도록 코딩하십시오.

이것은 스레드에 대한 거꾸로 생각하는 방법입니다. 스레드는 작동하는 차량 일뿐입니다. 작업을 제어하여 제어 할 수 있습니다. 스레드가 실행하는 모든 코드 줄을 작성합니다. 조건 Y에서 스레드를 X로 만들지 않으려면 조건 Y에서 X를 수행하지 않도록 코드를 작성하십시오.

요약하면 프로그램 논리에 따라 작업 Y가 닫히면 작업 X가 수행되지 않아야한다는 메시지가 표시되면 다음과 같이하십시오.

1) 작업 X를 완료해야하는지 여부를 나타내는 플래그를 저장하십시오.

2) X가 작동하는 코드에서이 플래그를 확인하십시오. 이 아니고으로 설정되어 있으면 작업하지 마십시오. 프로그램 논리에 따라 작업이 수행되어서는 안됩니다. 그것을하는 것은 깨진입니다. 탭이 닫혀

3)는 UI 스레드

탭 스레드에 대응 안 작업 X. 하 중지 플래그를 설정. 그건 논리적이지 않습니다. 탭은 탭에 표시되는 것과 일치해야합니다. 스레드는 간접적으로 스레드에 대응하지만 실제로는 탭과 연관된 작업에 해당합니다.

원칙적으로 다른 스레드가 동일한 작업을 수행하면 ' 그것은 여전히 ​​같은 탭에 있습니까? 아니면 다른 스레드가 그것을 생산하고 있기 때문에 같은 데이터가 갑자기 다른 탭에 있어야합니까? 동일한 스레드에서 해당 탭에있는 작업을 항상 수행하게되면 이 아닌의 구현 세부 사항이 아키텍처에 반영됩니다. 당신이 배웠던 것처럼, 그것은 정말로 당신이 상관하지 않을 때 어느 스레드가 작업을하고 있는지를 알아 내야 만하는 상황을 만듭니다.

+0

여기서 멈춰야 할 곳은 다음과 같습니다. 탭 중 하나를 닫을 때 7 개의 탭을 열 수있는 7 개의 스레드를 만들고, 어떤 스레드가 해당 탭에 속해 있는지 알기 때문에 중단 할 수 있습니다. 그렇게하는 가장 좋은 방법은 무엇입니까? – Arya

+0

@Ayra WPF는 스레드가 다른 스레드에서 생성 된 개체를 변경할 수 없기 때문에 스레드 당 하나의 탭을 만들고 싶지 않습니다. 대신 프로세스가 끝나면 자동으로 종료되는 일부 장기 실행 프로세스 동안 스레드를 생성하려고합니다. 'TabItem'을 상속받은 컨트롤을 생성 할 수도 있습니다.이 컨트롤은 Constructor에서 스레드를 시작하고 TabItem이 삭제 될 때 스레드를 종료합니다. 나는 그 길을 추천하지 않을 것이다. – Rachel

+0

@Arya : 어떤 스레드가 중지되는지 상관하지 않기 때문에 어떤 스레드가 해당 탭에 속하는지 알 필요가 없습니다. 작업이 끝나면 종료하는 것은 스레드의 작업입니다. UI 스레드는 해당 탭과 관련된 작업이 완료되었음을 나타내며 작업이 완료된 후에 탭 스레드가 계속 실행되지 않아야합니다. (모든 것을 코딩했기 때문에 함께 작동하게하십시오.) –