2011-03-08 102 views
0

我创建了使用远程联机MYSQL数据库的Windows应用程序。为了连接,我创建了一个DataConnector()类。每当我想连接时,我都会创建一个DataConnector()类的对象。显示连接数据库时的进度条

其实我想在连接发生到数据库时显示进度条,我的意思是进度条应该在应用程序的顶部,连接成功后应该自动关闭进度条。

需要一些想法如何做到这一点...我已经尝试过使用“backgroundworker”,但面临问题作为类内部的函数返回“MySqlConnection”类型。

这里是我的DataConnector()类..

namespace omg 
{ 
    class DataConnector 
    { 
     bool connected = false; 
     MySqlConnection connection = null; 
     MySqlCommand command; 
     string connectionstring = "server=127.0.0.1;database=online_trading_system;UserId=root;Password=phanny"; 
     public MySqlConnection connect() 
     { 
      try 
      { 
       connection = new MySqlConnection(connectionstring); 
       connection.Open(); 
       connected = true; 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show(ex.ToString()); 
       return connection; 
      } 

      MessageBox.Show("connected with the databse"); 
      // connection.Close(); 
      //connected = false; 
      return connection; 
     } 
     public void close() 
     { 
      connection.Close(); 
      connected = false; 
      MessageBox.Show("connection Closed"); 
     } 
    } 
} 
+2

WinForms,WebForms,WPF? – 2011-03-08 18:21:00

+0

'我创建了Windows应用程序......' – 2011-03-08 22:07:39

+0

虽然亨氏有一个很好的例子,但我真的质疑这个想法。通常,您只需保持连接打开的时间足以运行所需的即时查询。实例化连接真的需要超过几毫秒吗? – NotMe 2011-03-08 22:18:37

回答

1

你BackgroundWorker的做法是正确的。这里有一个简短的例子:

private void OpenConnectionButton_Click() { 
    var bw = new BackgroundWorker(); 

    bw.DoWork += (sender, e) => { 
     // this will happen in a separate thread 
     var connector = new DataConnector(); 
     connector.connect(); // this might take a while 
     e.Result = connector; 
    } 

    bw.RunWorkerCompleted += (sender, e) => { 
     // We are back in the UI thread here. 

     // close the progress bar 
     ... 

     if (e.Error != null) // if an exception occurred during DoWork, 
      MessageBox.Show(e.Error.ToString()); // do your error handling here 
     else { 
      var connector = (DataConnector)e.Result; 
      // do something with your connector 
     } 
    }; 

    // show the progress bar 
    ... 

    bw.RunWorkerAsync(); // start the background worker 
}