2013-08-05 59 views
1

我有兩個類,主要來自WPF和'persistDataToTable.Persist'PersistDataToTable.Persist'中的PersistDataToTable'我有一個循環,我想通過該循環回到主要的WPF類來顯示進度條。 我有一個backgroundworker線程運行命中循環的方法,我只是不知道如何從backgroundworker線程獲取數據返回ReportProgress方法。我如何將信息傳遞給我的主類從兒童類

private void PersistDataToDb(object sender, RoutedEventArgs e) 
    { 
     worker = new BackgroundWorker(); 
     worker.WorkerReportsProgress = true; 

     worker.DoWork += delegate(object o, DoWorkEventArgs args) 
      { 
       PersistDataToTable persistData = new PersistDataToTable(); 
       persistData.Persist(seriesId); 

       worker.ReportProgress(loop incrament from persist()??); 

      }; 

     worker.ProgressChanged += delegate(object o, ProgressChangedEventArgs args) 
      { 
       int percentage = args.ProgressPercentage; 
       progressBar.Value = percentage; 
      }; 

     worker.RunWorkerAsync(); 
    } 

回答

0

使用事件DoWork和RunWorkerComplete。下面是一個例子數到10,並將結果傳遞給一個標籤:

void worker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) 
{ 
    label1.Text = e.Result.ToString(); // getting the result set in DoWork 
} 

void worker_DoWork(object sender, DoWorkEventArgs e) 
{ 
    int value = 0; 

    for (int i = 0; i < 10; i++) 
     value++; 

    e.Result = value; // setting result for RunWorkerCompleted 
} 

這個MSDN文章:http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.dowork.aspx

1

你可以通過worker.ReportProgressAction<Int>到您的Persist方法,因此更新回你的UI

例子:

private void PersistDataToDb(object sender, RoutedEventArgs e) 
{ 
    worker = new BackgroundWorker(); 
    worker.WorkerReportsProgress = true; 

    worker.DoWork += delegate(object o, DoWorkEventArgs args) 
     { 
      PersistDataToTable persistData = new PersistDataToTable(); 
      persistData.Persist(seriesId, worker.ReportProgress); 
     }; 

    worker.ProgressChanged += delegate(object o, ProgressChangedEventArgs args) 
     { 
      int percentage = args.ProgressPercentage; 
      progressBar.Value = percentage; 
     }; 

    worker.RunWorkerAsync(); 
} 

public class PersistDataToTable 
{ 
    public void Persist(int seriesId, Action<int> progresscallback) 
    { 

     // set the progress and call the Action(worker.ReportProgress) 
     for (int i = 0; i < 100; i++) 
     { 
      progresscallback.Invoke(i); 
     } 
    } 
} 
相關問題