[英]how do I pass info to my main class from a child class
我有兩個類,來自WPF的主類和位於“ PersistDataToTable.Persist”內的子類“ PersistDataToTable”,我有一個循環,我想將該循環增量傳遞回主WPF類以顯示在進度欄中。 我有一個運行后台程序的方法的后台工作線程,我只是不知道如何從后台工作線程將數據返回到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();
}
您可以將worker.ReportProgress
作為Action<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);
}
}
}
使用事件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/zh-cn/library/system.componentmodel.backgroundworker.dowork.aspx
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.