2012-12-31 45 views
0

我正在通過c#winforms開發一個項目。 我有一個導航到表單之間的問題。立即在winforms中導航窗體

我正在使用經典的表單導航。

當我點擊主窗體上的一個按鈕時,會打開一個新窗體,其上有很多項目。

這裏是我使用的代碼。

frmMuayAnaEkran frm = new frmMuayAnaEkran(); 
frm.ShowDialog(); 

所以問題是表單創建太慢。真的,開放需要8-10秒。 我該如何解決這個問題? 這裏是我想要打開它的窗體屏幕:http://j.mp/VRMyby

+0

你打開這個表格每個應用程序運行一次?或者你想多次打開它? –

回答

1

讓我們假設你有以下的事情做形式負載:

void LoadStartupItemsAndDataBlahBlah(object sender, DoWorkEventArgs e) 
{ 
    int s = 0; 
    for (int i = 0; i < 1000; i++) 
     for (int j = 0; j < 1000; j++) 
      for (int k = 0; k < 1000; k++) 
       s++; 
    MessageBox.Show(s.ToString()); 
} 

,如果你調用形式負載這種方法

private void Form5_Load(object sender, EventArgs e) 
{ 
    Stopwatch t = new Stopwatch(); 
    t.Start(); 
    LoadStartupItemsAndDataBlahBlah(null,null); 
    t.Stop(); 
    this.Text = string.Format("[{0}] mili-seconds", t.ElapsedMilliseconds); 
} 

表單約5秒鐘後運行(5000毫秒)以及消息框1000000000

但如果您在後臺運行該方法

private void Form5_Load(object sender, EventArgs e) 
{ 
    BackgroundWorker bg = new BackgroundWorker(); 
    bg.DoWork += new DoWorkEventHandler(LoadStartupItemsAndDataBlahBlah); 
    Stopwatch t = new Stopwatch(); 
    t.Start(); 
    bg.RunWorkerAsync(); 
    t.Stop(); 
    this.Text = string.Format("[{0}] mili-seconds", t.ElapsedMilliseconds); 
} 

您的形式加載速度非常快,大約0-1毫秒,在5秒內消息框將到達並顯示它的價值1000000000

+0

您好我使用BackgroundWorker,但現在表單無法通過對話框打開。我使用Showdialog(),但像Show()一樣打開。 – TheMuyu

+0

@ TheMuyu讓我檢查一下,BRB在幾分鐘內。 –

+0

確定配偶。還當我關閉主窗體仍然運行的形式:) – TheMuyu

4

我想這個問題來自於您在窗體構造函數內部或FormCreated事件內執行了一些昂貴的操作。也許你正在查詢一個數據庫或一些遠程服務。有幾件事你可以考慮:

  • 在後臺線程上執行昂貴的操作。例如,您可以使用BackgroundWorker。這不會使數據看起來更快,它只會提供更好的用戶體驗,因爲表單會立即顯示,並且數據會稍後顯示,而不會阻止主UI。優化昂貴的操作。例如,如果您正在執行SQL查詢,則可能希望通過SQL分析器查看是否可以以某種方式對這些查詢進行優化。通過在某些列上放置索引,SQL查詢可以運行多快,這是不可思議的。如果您正在執行HTTP請求來獲取數據,那麼您可以考慮是否可以減少這些請求的數量 - 通常發送的請求數量少於通過線路返回更多數據的請求通常會更好,而不是使用小數據的許多請求。
  • 您可以在內存中緩存昂貴操作的結果,以便下次用戶打開相同表單時,他不需要等待那麼多才能檢索這些結果。
  • 根據應用程序的體系結構和導航工作流程,您可以在用戶實際導航到表單之前開始預加載一些數據。當然,這應該在後臺線程上再次完成,以避免凍結主工作線程。