2011-08-26 3 views
1

Windows에서 다음을 클릭하면 다른 양식을 표시하고 일부 처리를 시작해야합니다. .NET C#Windows 용로드 완료 이벤트 양식

양식이 완료되기 전에 문제가 발생하여 메서드가 트리거되고 처리가 시작되고 UI가 손상된 것처럼 보입니다. 컨트롤이로드되기 전에 처리가 시작되었습니다. 처리가 완료되면 모든 컨트롤이 표시됩니다. enter image description here 실제 출력은 모든 컨트롤을로드해야하며 처리가 시작되어야합니다. enter image description here

양식 (사용자 정의 컨트롤)이 표시되고 완전히로드 된 후 처리를 시작하려면 메서드를 호출해야합니다.

나는 thisthis을 시도했지만 행운은 없었다.

추가 코드 :

private void FeatureRemovalControl_Load(object sender, EventArgs e) 
{ 
    pictureBox2.Image = Properties.Resources.line; 
    prgbar.Value = 0; 
    //code to load images and some other stuff 
    StratProcess(); 
} 

답변

3

UI 스레드에서 StartProcess (완료 될 때까지 차단되는 것 같습니다) 전화입니다. WinForms repaints 해당 스레드에서 발생하기 때문에 아무 것도 그려지며 프로세스가 중단 된 것처럼 보입니다. BackgroundWorker을 사용하거나 다른 방법으로 StartProcess을 비동기 적으로 호출해야합니다.

+0

그러나 진행률 표시 줄이 나타나서 업데이트하는 것 같습니다. – w69rdy

+0

네, 알고 있습니다. 그게 내가 묻는 것. 어떤 방법으로 제안 해 주실 수 있습니까? –

+0

예 :'BackgroundWorker'를 사용하십시오. –

0

FormLoad 이벤트의 마지막에이 메소드를 호출 시도 제어 다음으로로드를 완료해야합니다. 그렇지 않은 경우 일부 검사를 수행하고 필요할 때 준비된 사용자 정의 이벤트를 만들 수 있습니다. 그것의 그것이 무슨 일이 일어나고 같이 이유가 있기 때문입니다 :

또 다른 해결책은 사용자가 모든 것을

EDIT가로드되면 그들은 단지 클릭 할 수있을 것입니다 처리를 트리거하기 위해 눌러야 버튼을 가지고있다 당신은 컨트롤의로드 메소드 중 하나에서 프로세스를 시작하고 있습니다.로드 메소드는로드 할 마지막 컨트롤이 아닌 것으로 가정하므로 다른 컨트롤에로드 할 기회가 주어지기 전에 처리를 시작합니다. StratProcess 방법을 공개하고 대신 부모 폼의 FormLoad 방법을 호출과 같이이 여전히 UI 스레드에서 처리를하고 있지만

private void ParentForm_Load(object sender, EventArgs e) { FeatureRemovalControl.StratProcess(); // Should it be called StartProcess instead? } 

이주의 때문에 화면이 동안 '중지'로 표시 될 수 있습니다 다른 사람들이 제안한대로 백그라운드 스레드로 이동하는 것이 좋습니다.

+0

동일하지만 작동하지는 않습니다. 폼로드 이벤트에서 호출되므로 폼로드가 완료되기 전에 메서드가 처리되기 시작하므로 UI가 방해받습니다. –

+0

어떤 방법으로 처리를 트리거하고 있습니까? 이 코드를 게시 할 수 있습니까? – w69rdy

+0

질문이 업데이트되었습니다. –