2012-04-13 6 views
1

키오스크 응용 프로그램에서 다음 문제가 발생했습니다.gui 업데이트 안 함

일부 축소판이있는 창이 있습니다. 사용자가 썸네일을 클릭하면 정보가있는 다른 윈도우 (docview)가 표시되고 가운데에 문서가 표시됩니다.

docview를 즉시 표시 한 다음 문서를로드하기를 원합니다 1 ~ 3 초 소요) 나중에 인터페이스에 추가하십시오.

내가 할 것입니다 .. 나는 엄지 손가락을 클릭하면 순간

는 인터페이스는 두 번째 또는 두 개의위한 정지, 다음 docview 이미 문서로 볼 수 있습니다 :

 viewgrid.Children.Add(docView); // the main window uses this grid to display the windows 
     viewgrid.InvalidateVisual(); 
     viewgrid.UpdateLayout(); // at this point I would like to have the docView visible 
     docView.showDocument(); //and afterwards, the loading of the document should start and be also visible eventually.. 

나는 성공하지 LayoutUpdated 이벤트를 사용하여 시도했다. 또한 별도의 스레드에 showDocument 퍼팅 중 하나도 도움이되지 않았다. 나는 또한 Application.DoEvents()에 대해 읽었지 만, 그게 더 이상 사용되지 않을 것이고 어쨌든 나쁜 연습 것처럼 보입니다.

어떻게 해결해야합니까?

미리 감사드립니다.

답변

0

문서를로드하려면 BackgroundWorker 개체를 사용해야합니다. 스레딩을 시도했지만 작동하지 않는다고했으나 스레딩이 작동해야하고 백그라운드 작업자를 사용하는 것이 좋습니다. http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker(v=vs.110).aspx

난 당신이로드하는 문서의 유형을 잘 모르겠지만, 여기에 설명 된대로 내가 바인딩 사용하여 서식있는 텍스트 파일을로드 : http://www.rhyous.com/2011/08/01/loading-a-richtextbox-from-an-rtf-file-using-binding-or-a-richtextfile-control/

당신은 당신이 BackgroundWorker에 문서를로드 같은 일을 할 것 . 문서가로드되면 바인딩 된 속성을 업데이트하면 UI가 업데이트됩니다.

+0

나는 내가 원하는 것을 이해하지 못한다고 생각합니다. 알고 싶은 것은 'IsRendered' 이벤트를 사용하여 레이아웃을 렌더링하고 표시 할 때 문서를로드 할 수 있다는 것을 알았습니다. 문서 자체는 마이크로 소프트 파워 포인트 interop dll에 의해로드 된 파워 포인트입니다. – Daan

+0

다음은 내가 이해 한 것입니다. WPF에서 문서를로드하는 요소가 있습니다. 요소를 즉시 표시하려고하지만 비어있는 경우 배경 작업자가 문서를 자체 속도로로드합니다. – Rhyous

+0

좋습니다.하지만 배경 작업자가 이전에로드를 완료하면 어떻게해야합니까? 난 정말 파워 포인트 DLL을 제어 할 수 없습니다 .. – Daan

0

비동기 바인딩을 사용해 볼 수 있습니다. 또는 다른 스레드와 Dispatcher를 사용하여 수동으로 수행하십시오. 그러나 그것은 귀하의 ShowDocument가하고 있으며 그것이 느리다는 것에 달려 있습니다.

+0

수동으로 어떻게해야합니까? 스레드를 기다릴 수 있고 docview 화면이 보이면 문서를로드하기 시작할 수 있습니다. 그러나 화면이로드되고 표시되는 것을 어떻게 알 수 있습니까? event layoutupdated가 너무 빨리 실행됩니다. – Daan

+0

나는 showDocument가하고 있다는 것을 이해하지 못한다고 생각합니다. 천천히 somethere에서 문서를로드하고 어떻게 든 그것을 보여?. 아니면 그냥 일부 컨트롤을 보여 주지만 그 렌더링이 느립니다 & – Nikolay

+0

showDocument 메서드는 WindowsFormHost를 docview에 추가합니다. 그런 다음 Microsoft Office Interop dll을 사용하여 문서를로드하고 SetParent 호출을 사용하여 windowsformhost에이 문서를 넣습니다. – Daan