我在他的应用程序读取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/

10-17 00:56