2012-11-25 2 views
0

로드하는 데 약 10 초가 걸리는 사용자 지정 컨트롤이있는 C# Winforms 폼이 있습니다. 바로 지금 메뉴 항목을 클릭하여 양식을 열면 메뉴가 10 초 동안 멈추고 양식이 바로 준비가됩니다. 제가하고 싶은 것은 다음과 같습니다 : 적절한 양식을 열기 위해 적절한 메뉴 항목을 클릭하자마자 바로 폼을 표시하고 싶지만 빨간색 배경과 컨트롤이없는 상태 일 것입니다. 그러면 폼이 모든 컨트롤을로드하기 시작할 수 있습니다. 그렇게하면 사용자가 마우스 클릭으로 새 양식이 열리는 것을 보았을 때 전체 앱이 얼어 붙은 것처럼 보이지 않습니다. 새로운 스레드로 이동하는 것은 옵션이 아닙니다.폼의 컨트롤이 적어도 폼의 프레임이 표시 될 때까지로드되지 않게하려면 어떻게합니까?

+0

같은

즉 뭔가 당신은 사람이 그것을로드 알고 있습니다 애니메이션과 함께 "로드"양식을로드 할 수 양식에서 양식을로드하십시오. –

+0

"새 스레드로 이동하는 것은 옵션이 아닙니다."라고 말하면됩니다. Ui 스레드를 하나만 가질 수는 있지만 사실상 백그라운드 스레드를 사용하지 못하게하는 다른 제한 사항이 있습니까? – rene

+2

이 경우 올바른 피드백을 제공하는 데는 이미 완전히 좋은 방법이 있습니다. 그것은 하나의 라이너입니다 : Cursor.Current = Cursors.WaitCursor; –

답변

1

사용자 컨트롤을 별도의 사용자 정의 컨트롤에 넣은 다음 표시되는 이벤트에서 인스턴스화 한 다음 폼에 추가 했습니까? 이

Form1에

public partial class Form1 : Form 
{ 
    UserControl1 usr; 
    public Form1() 
    { 
     InitializeComponent(); 
    } 

    private void Form1_Shown(object sender, EventArgs e) 
    { 
     usr = new UserControl1(); 
     usr.Dock = DockStyle.Fill; 
     panel1.Controls.Add(usr); 
    } 
} 

UserControl1을

public partial class UserControl1 : UserControl 
{ 
    public UserControl1() 
    { 
     System.Threading.Thread.Sleep(10000); 
     InitializeComponent(); 

    } 
}