2017-03-07 1 views
-3

J'ai fait une méthode et je voulais la mettre sur Backgroundworker avec une barre de progression dedans. C'est la première fois que je travaille sur un travailleur en arrière-plan.Comment mettre la méthode en Backgroundworker

voici mon code:

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

Nous n'écrirons pas le code pour vous. Avez-vous une question plus spécifique? Quelles recherches avez-vous faites jusqu'à présent? –

+0

J'ai fait quelques recherches monsieur, mais je ne comprends pas comment utiliser le Backgroundworker.Dowork, ProgressChange et le RunworkerChange. Je voulais que quelqu'un m'explique. et je vais l'appliquer à mon code. –

+0

Copie possible: http://stackoverflow.com/questions/6481304/how-to-use-a-backgroundworker –

Répondre

2

Supposons que vous avez votre travailleur de fond en tant que membre de la classe:

private BackgroundWorker bw; 

Lorsque vous allez l'utiliser, vous créez et initialisez:

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

Ensuite, vous lancez:

 bw.RunWorkerAsync(); 

Vous devez fournir une méthode pour faire le travail réel:

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

Vous pouvez fournir également une méthode pour gérer la variation en pourcentage. Il sera appelé automatiquement chaque fois que vous exécutez ReportProgress sur votre agent d'arrière-plan. Soyez prudent, il est lancé dans son propre thread, pas sur votre thread UI comme vous pouvez vous y attendre:

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