2017-03-07 114 views
-3

我已经制作了一个方法,并且希望它可以放在Backgroundworker上并带有一个进度条。这是我在后台工作的第一个工作。如何在Backgroundworker中添加方法

这里是我的代码:

public void WorkLoad() 
    { 
     string conStr, sheetName; 
     conStr = string.Empty; 
     //Get the name of the First Sheet. 

     using (OleDbConnection kuneksyon = new OleDbConnection(Excel07ConString)) 
     { 
      using (OleDbCommand utos = new OleDbCommand()) 
      { 
       using (OleDbDataAdapter oda = new OleDbDataAdapter()) 
       { 
        utos.Connection = kuneksyon; 
        kuneksyon.Open(); 
        DataTable dtExcelSchema = kuneksyon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null); 
        sheetName = dtExcelSchema.Rows[0]["TABLE_NAME"].ToString(); 
        kuneksyon.Close(); 
        DataTable dt = new DataTable(); 
        utos.Connection = kuneksyon; 
        utos.CommandText = "SELECT [Engineer],[SITEID],[SITE NAME],[2G TX Status],[3G TX Status],[WO Status-LTE] From [" + sheetName + "]"; 
        kuneksyon.Open(); 
        oda.SelectCommand = utos; 
        oda.Fill(dt); 
        kuneksyon.Close(); 
        //Populate DataGridView. 
        ForIssuanceView.DataSource = dt; 
        ForIssuanceView.Columns.Add(" ", " "); 
       } 
      } 
     } 
    } 
+3

我们不是为您编写代码。你有更具体的问题吗?你迄今为止进行了哪些研究? –

+0

我做了一些研究先生,但我不明白如何使用Backgroundworker.Dowork,ProgressChange和RunworkerChange。我想有人向我解释。我会将其应用于我的代码。 –

+0

可能的重复: http://stackoverflow.com/questions/6481304/how-to-use-a-backgroundworker –

回答

2

让我们假设你有你的背景工人作为一个阶级的成员:

private BackgroundWorker bw; 

当你要使用它,您可以创建和初始化:

 bw = new BackgroundWorker(); 
     bw.WorkerReportsProgress = true; 
     bw.ProgressChanged += ProgressChanged; 
     bw.DoWork += DoWork; 

然后你开始吧:

 bw.RunWorkerAsync(); 

你应该提供一个方法做实际的工作:

private static void DoWork(object sender, DoWorkEventArgs e) 
    { 
     // do your actual work and report percentage whenever you find appropriate 
     for (var p = 0; p < 100; p++) 
     { 
      bw.ReportProgress(p); 
     } 
    } 

您也可以提供处理百分比变化的方法。每当您对后台工作人员执行ReportProgress时,它会自动调用。请注意,它会在您自己的线程中启动,而不是像您期望的那样在您的UI线程中启动:

private static void ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 
     // inform the UI that the percentage has been changed 
    } 
相关问题