2012-10-02 2 views
0

WPF 브라우저 응용 프로그램에서 작업 중입니다. 페이지로드가 완료되고 구성 요소가 무거운 배경 서비스로드를 시작할 때 표시되는 방법을 이해할 수 있는지 알고 싶습니다. 그렇지 않으면 모든 서비스가로드 될 때까지 몇 초 동안 흰색 페이지가 표시됩니다.이 문제를 해결하기위한 권장 사항은 무엇입니까?WPF 창이나 페이지가로드를 제어하는 ​​시점을 이해할 수 있습니까?

public Page1() 
    { 
     InitializeComponent(); 
    } 

    private void Page_Loaded_1(object sender, RoutedEventArgs e) 
    { 

     // Just some heavy process in the begining 
     int j = 1; 
     for (int i = 0; i < 10000000; i++) 
     { 
      for (int k = 0; k < 1000; k++) 
       j=j * 2; 
     } 
     MessageBox.Show("ready"); 
    } 

그러나, 페이지 구성 요소가 PAGE_LOADED의 프로세스가 완료 전까지 페이지에로드되지 않은 : 여기

내가 시도했던 것입니다. page_loaded에 무거운 프로세스가 없어도 모든 것이 매우 빠르게로드되므로 UI에는 아무런 문제가 없습니다.

업데이트 : 페이지 또는 창에로드 된 이벤트에서 이해할 수있는 점은 페이지 또는 창이로드되면 가져오고 페이지의 구성 요소와 컨트롤을로드해도 스타일이 적용됩니다. ... 그리고 컨트롤의로드가 완료되었음을 보여주는 이벤트를 찾지 못했습니다 ...

UPDATE2 : 내 문제에 대한 더 나은 해결책은 BackgroundWorker 또는 Dispatcher를 사용하여 무거운 프로세스를 실행하는 것입니다. 배경. 우편 번호 this에서 논의 된 바와 같이.

+2

'Window','Page' 또는'UserControl'의'Loaded' 이벤트를들을 수 있습니다. – Guillaume

+0

Guillaume aswer로 의견을 게시하십시오 ... –

+1

@YoupTube, 튜더가 나 한테 해줬 어! – Guillaume

답변

2

이 경우 응용 프로그램에서 스레딩을 구현해야합니다. 페이지로드 메소드에 코드를 작성하는 경우. 로드 메소드가 완전히 실행될 때까지 페이지가 렌더링되지 않습니다. Background Worker을 사용하고 백그라운드에서 프로세스를 실행할 수 있습니다.

2

Window 클래스는 Loaded 이벤트를 제공합니다 : 요소를 배치 및 렌더링하고 상호 작용할 수 있도록 준비 할 때

가 발생합니다.

후크 최대 핸들러를 거기에 코드 실행 : 귀하의 질문에 대한 내 댓글 당 튜더의 대답에 따라로서

<Window ... Loaded="Window_Loaded"/> 
+0

이미 시도해 보았습니다. 그것은 작동하지 않았다 나는 보인다 ... 로딩이 완료되었음을 보여주는 이벤트가 있습니까? –

+0

@Mahsa Teimourikia :로드 된 문서를 보면로드가 완전히 완료되고 모든 컨트롤이 초기화됩니다. 당신의 경우에 무슨 일이 일어나고 있습니까? – Tudor

+0

나를 위해 page_loaded의 모든 프로세스가 완료 될 때까지 페이지 구성 요소가 초기화되지 않습니다 ... –

1

, 당신은 당신의 PageLoaded 이벤트를 사용해야합니다.

<Page ... Loaded="Page_Loaded_1"/> 

지금 당신의 Kinect를 초기화하여 Page UI 렌더링의 일환으로 수행하여 서로 다른 의견에서 보인다. 또는 다른 시간이 많이 걸리는 작업이 처리 중입니다.

Kinect의 작동 방식에 대한 단서가 전혀 없지만 Visual Studio Designer에서 Page에 추가 한 컨트롤 중 하나에서 해당 초기화가 호출되었다고 의심됩니다. 그런

예를 들어 뭔가 :

<ContentControl DataContext="{Binding MyKinnectStuff}"/> 

그것은 더 뭉 수 있습니다. 예를 들어 getter가 Kinect를 초기화하는 메소드를 호출하는 속성에서 데이터 바인딩을 사용합니다. 그것이 아닌지 다시 확인하십시오.

편집에서 추가 한 코드 샘플에서 Kinect (초기화, 데이터 바인딩 등)와 관련된 모든 것이 Page_Loaded_1 메서드에 있고 UI 내에서 직접 아무것도 수행되지 않았는지 확인하십시오. 또한 UI에서 수행되는 다른 시간 소모적 인 작업이 없는지 확인하십시오. 마지막으로 XAML에서 <Page Loaded="Page_Loaded_1"/>이 아닌 <Page Loaded="Something_Else"/>이 아닌지 확인하십시오.

질문을 다시 편집하고 XAML의 모양을 표시해야합니다.

+0

page_loaded에 타이머를 설정하려고했는데 타이머가 시작되기 전에 타이머가 끝난 후 메시지를 언제 보여줄지 보여줍니다. 이 page_loaded가 실행되고 구성 요소가 아직로드되지 않았을 때 두 메시지가 팝업됩니다 ... Kinect 초기화는 UI 구성 요소와 아무 관련이 없으며 page_loaded 이벤트가 올바르게 참조됩니다 ... –

+0

더 많이 표시해야합니다 코드를 사용하여 도움을 얻으십시오. XAML은 어떤 모습입니까? Kinect 초기화가 언제, 어떻게 그리고 어떻게 완료됩니까? 서로 다른 구성 요소 간의 상호 작용은 무엇입니까? 그렇지 않으면 우리는 추측과 근사만을 제공 할 수 있습니다. – Guillaume

+0

내 질문을 편집하고 관련 코드를 추가하겠습니다 –