Как добавить индикатор выполнения и статус в процесс, который не имеет счетчика, как при копировании файлов? - PullRequest
0 голосов
/ 03 апреля 2020

Итак, я разместил вопрос о том, как заставить работать мой пример проекта, и теперь он работает. Пример проекта И это здорово, потому что, как и в этом примере, у меня есть производственный проект, который требует копирования файлов, так что отлично подойдет для этого.

Но этот вопрос касается отображения индикатора выполнения для процесса, который мне не совсем понятен, как его реализовать.

Я читаю файл Excel, используя закрытый xml, я прочитал этот файл в таблицу данных, чтобы выполнить некоторую фильтрацию и другие вещи, чтобы заполнить некоторые списки в моей форме, как мой пример кода в моем другом посте может быть реализован против создания 5 или 6 таблиц данных?

Я могу предоставить некоторые из методов создания данных, но общий код сейчас близок к 600 строкам и еще не закончен ... поэтому ниже приведен упрощенный пример текущего кода, с которым я работаю ..

    private void sample()
    {
        string plink = @"C:\Test\Sizes.xlsx";
        string[] DistinctDept = { "Dept Code", "Dept Description" };

        DataTable ListDept = GetDistinctRecords(LoadExceltoDatatable(plink), DistinctDept);
        ListDept.Columns.Add(new DataColumn("DeptCombo", typeof(string), "'('+[Dept Code] +') ' + [Dept Description]"));
        if (string.IsNullOrEmpty(ListDept.Rows[0]["Dept Code"].ToString()))
        {
            ListDept.Rows[0].Delete();
            ListDept.AcceptChanges();
        }
        lbDept.DataSource = ListDept;
        lbDept.DisplayMember = "DeptCombo";
        lbDept.ClearSelected();
    }

    public static DataTable GetDistinctRecords(DataTable dt, string[] Columns)
    {
        DataTable dtUniqRecords = new DataTable();
        dtUniqRecords = dt.DefaultView.ToTable(true, Columns);
        return dtUniqRecords;
    }

    public static DataTable LoadExceltoDatatable(string sizeoptcalc)
    {
        using (var wb = new XLWorkbook(sizeoptcalc, XLEventTracking.Disabled))
        {
            var ws = wb.Worksheet(1);
            var foundMonth = ws.Search("Month", System.Globalization.CompareOptions.OrdinalIgnoreCase);
            var monthRow = foundMonth.Last().Address;  // A11
            var lastcell = ws.LastCellUsed().Address; // BC3950
            DataTable dataTable = ws.Range(monthRow, lastcell).RangeUsed().AsTable().AsNativeDataTable();
            return dataTable;
        }
    }

Можно ли это изменить, чтобы сообщить о прогрессе? Я имею в виду, что в некоторых случаях файлы Excel имеют большой размер и занимают некоторое время, чтобы заполнить мои списки.

Вот еще несколько созданных с помощью данных созданий, которые я хотел бы отразить для общего прогресса их

More samples of the logic im trying to report progress on

...