2012-11-25 43 views
0

我有一個C#Winforms窗體,有大量的自定義控件大約需要10秒才能加載。現在,當我點擊菜單項打開我的表單時,菜單凍結了10秒,然後彈出窗體準備就緒。我想要做的是以下幾點:只要你點擊相應的菜單項打開我的表單,我想立即顯示錶單,但也許只是一個紅色的背景,沒有控制它。然後表單可以開始嘗試加載我的所有控件。這樣用戶就會看到他們的鼠標點擊打開了新窗體,並且看起來並不像整個應用程序凍結。將它移動到新線程不是一個選項。如何才能使窗體的控件不加載,直到至少顯示窗體的框架?

+0

你可以加載一個 「加載」 形式的動畫,讓對方知道它的負荷,然後從該表單加載您的表單。 –

+0

你說「將它移動到新線程不是一個選項」。這是真的,因爲你只能有一個UI線程,但是在你的代碼中有其他限制阻止使用後臺線程嗎? – rene

+2

在這種情況下,已經有一個非常好的方法來提供適當的反饋。它是一個單線程:'Cursor.Current = Cursors.WaitCursor;' –

回答

1

您是否曾嘗試將您的用戶控件放在單獨的用戶控件中,然後在您的Shown事件中實例化它,然後將其添加到您的表單中。

即是這樣的

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(); 

    } 
} 
相關問題