2016-10-14 1 views
0

J'exporte une table de données pour exceler le dossier using l'ouvrier d'arrière-plan. Et je voulais montrer la progression de l'exportation en utilisant la barre de progression. Devons-nous écrire le code d'exportation dans l'événement Do Work ou pouvons-nous appeler une méthode, qui est présente dans une autre classe. Dans mon code, j'ai essayé d'appeler une méthode différente. Mais ça ne marche pas. Voici l'exemple de code.Peut-on appeler la méthode dans un événement DoWork?

public MainWindow() 
{ 
    InitializeComponent(); 
    property = new Property(); 
    this.DataContext = property; 
    worker.WorkerReportsProgress = true; 
    worker.DoWork += worker_DoWork; 
    worker.ProgressChanged += worker_ProgressChanged; 
    worker.RunWorkerCompleted += worker_RunWorkerCompleted; 
} 

private void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    if (e.Error != null) 
    { 
     System.Windows.Forms.MessageBox.Show(e.Error.Message); 
    } 
    else 
    { 
     System.Windows.Forms.MessageBox.Show("Exported Successfully"); 
    } 
} 

private void worker_ProgressChanged(object sender, ProgressChangedEventArgs e) 
{ 
    pbStatus.Value = e.ProgressPercentage; 
} 

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    Export export = new Export(); 
    export.GenerateExcelFile(); 
} 
+1

Pouvez-vous montrer la partie du code où votre travailleur soulève la 'worker_ProgressChanged' et les événements 'worker_RunWorkerCompleted'? –

Répondre

0

Vous devez appeler worker.ReportProgress de worker_DoWork avec une valeur de progression valide

private void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    worker.ReportProgress(0); 
    // Some job 
    worker.ReportProgress(10); 
    // ... 
    // Finish 
    worker.ReportProgress(100); 
} 

Je ne sais pas comment vous générez rapport. En outre, je suppose que votre pbStatus a Minimum="0" et Maximum="100". Vous pouvez après l'exportation de chaque rapport de progression de la ligne quelque chose comme ça.

worker.ReportProgress(currentRow * 100.0/totalRows); 

vous définissez également votre barre de progression intermédiaire si vous n'êtes pas sûr de savoir comment calculer que par la mise en progress.IsIndeterminate à true

pbStatus.IsIndeterminate = true; 
+0

Merci @Adnan Umer. La solution m'a aidé à résoudre le problème. –

+0

Si oui, n'oubliez pas de marquer la réponse comme acceptée. –