【发布时间】:2012-01-27 21:33:54
【问题描述】:
我正在尝试获取一个ProgressBar,其中包含使用BackgroundWorker 将数据集转换为Excel 的进度。问题是这项工作是在与ProgressBar 不同的班级中完成的,我很难从我的循环中调用worker.ReportProgress(...)。如果这是一件容易的事情,我很抱歉,但我是 C# 的新手,并且整天都在尝试这个,但似乎无法做到正确。非常感谢您的帮助。
namespace CLT
{
public partial class GenBulkReceipts : UserControl
{
private void btnOpen_Click(object sender, EventArgs e)
{
Cursor.Current = Cursors.WaitCursor;
try
{
OpenFile();
}
Cursor.Current = Cursors.Default;
}
private void OpenFile()
{
if (dsEx1.Tables[0].Rows.Count > 0)
{
backgroundWorker1.RunWorkerAsync(dsEx1);
}
}
public void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
DataSet ImportDataSet = e.Argument as DataSet;
AccountsToBeImported = new BLLService().Get_AccountsToBeReceipted(ImportDataSet);
}
public void backgroundWorker1_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
this.progressBar1.Value = e.ProgressPercentage;
}
// ...
}
}
namespace BLL
{
class GenBulkReceiptsBLL
{
public DataSet Get_AccountsToBeReceipted(DataSet dsImport)
{
DataSet dsReturn = AccountsDAL.QGenReceiptAccounts(0,0,"");//Kry Skoon DataSet wat ge-populate moet word
CLT.GenBulkReceipts pb = new CLT.GenBulkReceipts();
int TotalRows = dsImport.Tables[0].Rows.Count;
//pb.LoadProgressBar(TotalRows);
int calc = 1;
int ProgressPercentage;
foreach (DataRow dr in dsImport.Tables[0].Rows)
{
ProgressPercentage = (calc / TotalRows) * 100;
//This is the problem as I need to let my Progressbar progress here but I am not sure how
//pb.worker.ReportProgress(ProgressPercentage);
}
return dsReturn;
}
// ...
}
}
【问题讨论】:
-
try-catch的catch子句在btnOpen_Click(...)方法中的位置在哪里? -
如果您的问题得到解决,请确保您接受答案;并为您认为有用的任何内容投票。
-
它在那里我只是没有在这里包含它来制作代码示例排序器
标签: c# winforms progress-bar backgroundworker