2014-01-30 21 views
0

如何在Windows應用程序使用數據庫時顯示等待消息。如何在應用程序使用數據庫時顯示等待消息?

問題是當我顯示消息「Please wait ...」時,應用程序在響應完成數據庫操作後纔會響應。

我有簡單的功能,而它正在執行我想顯示一個類似的消息DB互動「請稍候...」

但我的應用程序不應該掛,必須響應用戶交互。

這是我的功能。

  public void getReleaseInfo(Label lblDbVersion) 
      { 
       if (gc.logger.IsInfoEnabled) 
        gc.logger.Info("getReleaseInfo - Method Start"); 

       string l_sConfigPath = gc.APP_CONFIG_FILE_PATH; 
       var element = XDocument.Load(l_sConfigPath).Descendants("configuration").Descendants("connectionStrings"); 
       if (element != null) 
       { 
        foreach (var item in element.Elements("add")) 
        { 
         gc.APP_CONNECTIONSTRING = (string)item.Attribute("connectionString"); 
        } 
       } 
       try 
       { 
        m_oConn = new SqlConnection(gc.APP_CONNECTIONSTRING); 
        m_oConn.Open(); 
        using (SqlDataAdapter l_oDA = new SqlDataAdapter(gc.SP_GETRELEASEINFO, m_oConn)) 
        { 
         l_oDA.SelectCommand.CommandType = CommandType.StoredProcedure; 
         using (DataSet l_oDS = new DataSet()) 
         { 
          l_oDA.Fill(l_oDS); 
          if (!l_oDS.HasErrors) 
          { 
           if (l_oDS.Tables[0].Rows.Count > 0) 
           { 
            lblDbVersion.Text = string.IsNullOrEmpty(l_oDS.Tables[0].Rows[0]["ReleaseInfo"].ToString()) ? "Release information not available" : l_oDS.Tables[0].Rows[0]["ReleaseInfo"].ToString(); 
           } 
          } 
         } 
        } 
       } 
       catch (Exception ex) 
       { 
        tsslDbError.ForeColor = System.Drawing.Color.Red; 
        lblDbVersion.Text = "iReg Release Information Not Available"; 
        tsslDbError.Text = "Unable to connect with iReg Database, Please contact iReg Suppot!"; 
        btnBrowse.Enabled = false; 
        btnBackup.Enabled = false; 
       } 
       finally 
       { 
        if (m_oConn != null) 
        { 
         if (m_oConn.State == ConnectionState.Open) 
          m_oConn.Close(); 

         m_oConn.Dispose(); 
        } 
       } 

       if (gc.logger.IsInfoEnabled) 
        gc.logger.Info("getReleaseInfo - Method End"); 
      } 

從這裏我打電話給那個函數。

+0

如果您使用的是.net 4.5,那麼您可以使用異步並等待來實現此目的。 –

回答

1

我建議你使用一個BackgroundWorker(System.ComponentModel)

你的代碼應該是這樣的(這是一個樣本... ;-)不是如一個完美的解決方案 如果發生錯誤,您將永遠無法看到由錯誤填充的標籤,但始終爲空。我想你可以理解爲什麼。請注意,您可能會收到一些「不安全的代碼警告」,試圖更改不同線程中創建的標籤內容,以避免管理workerprogess更改)。

using (BackgroundWorker bgw = new BackgroundWorker()) 
{ 
    bgw.DoWork += bgw_DoWork; 
    bgw.RunWorkerCompleted += bgw_RunWorkerCompleted; 

    this.tsslDbError.ForeColor = System.Drawing.Color.Black; 
    tsslDbError.Text = "Please wait... While connecting to iReg Database."; 
    bgw.RunWorkerAsync(); 
} 

而且可以肯定,你必須添加這些方法:

private void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    this.tsslDbError.Text = string.Empty; 
    if (gc.logger.IsInfoEnabled) 
     gc.logger.Info("btnIregPath_Click - Method End"); 
} 

private void bgw_DoWork(object sender, DoWorkEventArgs e) 
{ 
    try 
    { 
     lblDbVersion.Text = string.Empty; 
     getReleaseInfo(lblDbVersion); 
    } 
    catch (Exception ex) 
    { 
     this.tsslDbError.ForeColor = System.Drawing.Color.Red; 
     lblDbVersion.Text = "iReg Release Information Not Available"; 
     this.tsslDbError.Text = "Unable to connect with iReg Database, Please contact iReg Suppot!"; 
     btnBrowse.Enabled = false; 
     btnBackup.Enabled = false; 
    } 
} 
+0

感謝它在我的案件.... – IAmDineshL

3

您必須在單獨的線程中執行數據庫調用,以便在數據庫調用運行時維護響應式UI。

+0

我也試過,但沒有工作。 – IAmDineshL

0

如你所知,因爲計算機的速度,如果它決不會與您的方法,因爲可以顯示發生這種錯誤的如果沒有像messagebox.show這樣的停止點或錯誤逐行寫入的文本框,則下一個錯誤將以毫秒爲單位覆蓋預見錯誤。

如果錯誤編號不是很大,我建議您使用日誌文本框。

相關問題