我在他的应用程序读取Excel表格中的数据并从中获取数据时,我在使用进度栏时遇到问题
这就是我想做的:
我的应用程序从工作簿中各种Excel工作表的单元格中读取数据
读取数据后,将向用户显示一个消息框,显示“文件读取成功”
从文件中读取数据时,我需要在表单中运行进度栏,并且需要在弹出消息框之前显示一次完成百分比
这就是我所做的-:
我添加了背景工作者和进度条
这是调用Run worker的代码段,单击按钮并选择要读取的文件时,将调用RunWorkerAsync。
// Start the BackgroundWorker.
fileReadingbackgroundWorker.RunWorkerAsync();
报告进度的摘要
int percentProcessFile =1;
for (int i = 1; i <= countSheets; i++)
{
readSheet = (Excel.Worksheet)excelWorkbook.Worksheets.get_Item(i);
for (int row = 2; row <= 100; row++)
{
if (readSheet.Cells[1][row].Text.ToString() != "")
{
for (int column = 1; column <= 15; column++)
{
String Key = readSheet.Cells[1][row].Text.ToString();
String readCaptionCell = readSheet.Cells[column][1].Text.ToString();
String readCurrentCell = readSheet.Cells[column][row].Text.ToString();
if (readSheet.Name == "ISMB")
ISMBSections.Add(Key, readCaptionCell, readCurrentCell);
else if (readSheet.Name == "ISMC")
ISMCSections.Add(Key, readCaptionCell, readCurrentCell);
}
}
else
{
break;
}
precentProgressFile++;
fileReadingbackgroundWorker.ReportProgress(precentProgressFile);
}
}
fileReadingbackgroundWorker.ReportProgress(precentProgressFile);
行引发异常我也添加了以下几行
private void fileReadingbackgroundWorker_DoWork(object sender, DoWorkEventArgs e)
{
for (int i = 1; i <= 100; i++)
{
// Wait 100 milliseconds.
Thread.Sleep(100);
// Report progress.
fileReadingbackgroundWorker.ReportProgress(j);
}
}
private void fileReadingbackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
{
fileReadingProgressBar.Value = e.ProgressPercentage;
}
第二个片段中的
fileReadingbackgroundWorker.ReportProgress(precentProgressFile);
行引发异常我无法理解这里出了什么问题。
我正在使用Visual Studio 12.0和.Net 4.0
请问您有什么问题
不是Accessing UI Control from BackgroundWorker Thread - C#的副本
原因是我没有在任何地方使用DispatcherInvoke。
最佳答案
BackgroundWorker有一个名为WorkerReportsProgress
的属性,需要将该属性设置为true才能报告进度。
关于c# - 使用进度条使用C#从Excel文件读取数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19890235/