示例#1
0
        /// <summary>
        /// 异步写入csv
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private async Task WriteData(string fileName)
        {
            if (this.modelCsvData != null)
            {
                Stopwatch      sc  = null;
                CsvWriteHelper csv = null;

                try
                {
                    CsvFlag flag = new CsvFlag(Convert.ToChar(this.cob_separator.Text), Convert.ToChar(this.cob_FieldEnclosed.Text));
                    Progress <CsvWriteProgressInfo> p = new Progress <CsvWriteProgressInfo>(r =>
                    {
                        this.sync.Post(t =>
                        {
                            double val             = (t as CsvWriteProgressInfo).WirteRowCount / (double)(this.modelCsvData.Count + (this.cob_FirstIsHead.SelectedIndex == 0 ? 1 : 0));
                            this.pb_Progress.Value = Convert.ToInt32(val * 100);
                        }, r);
                    });

                    csv = new CsvWriteHelper(fileName, Encoding.UTF8, flag, cancelSource.Token, p, 1000);

                    sc = Stopwatch.StartNew();

                    //因为 ui 线程同步执行 WriteLineAsync 中的部分代码, 所以用 Task.Run 在其它线程中执行, 避免 ui 阻塞.
                    await Task.Run(async() =>
                    {
                        if (columnsName != null)
                        {
                            await csv.WriteLineAsync(columnsName);
                        }

                        await csv.WriteAsync(this.modelCsvData, f =>
                        {
                            return(ConvertModelToRowData(f));
                        });

                        await csv.FlushAsync();
                    }, this.cancelSource.Token);
                }
                finally
                {
                    if (csv != null)
                    {
                        csv.Close();
                    }

                    if (sc != null)
                    {
                        sc.Stop();
                    }

                    this.sync.Post(k =>
                    {
                        this.tb_Times.Text = k.ToString();
                    }, sc.Elapsed.TotalSeconds.ToString());
                }
            }
        }
示例#2
0
        /// <summary>
        /// 异步读取csv
        /// </summary>
        /// <returns></returns>
        private async Task ReadData()
        {
            if (!string.IsNullOrWhiteSpace(tb_FileName.Text))
            {
                ModelCsvData = null;
                Stopwatch     sc  = null;
                CsvReadHelper csv = null;

                try
                {
                    sc = Stopwatch.StartNew();
                    CsvFlag flag = new CsvFlag(Convert.ToChar(cob_separator.Text), Convert.ToChar(cob_FieldEnclosed.Text));
                    csv = new CsvReadHelper(tb_FileName.Text, Encoding.UTF8, flag, CancelSource.Token, !Convert.ToBoolean(cob_FirstIsHead.SelectedIndex), 40960);

                    await csv.ReadAsync(k =>
                    {
                        Sync.Post(f =>
                        {
                            var eve = f as CsvReadProgressInfo <TestProductModel>;

                            if (eve.CurrentRowsData != null)
                            {
                                if (ModelCsvData == null)
                                {
                                    InitDataGridView(eve.ColumnNames);
                                    ModelCsvData = eve.CurrentRowsData;
                                }
                                else
                                {
                                    ModelCsvData.AddRange(eve.CurrentRowsData);
                                }

                                if (eve.ProgressValue - pb_Progress.Value >= 10 || eve.ProgressValue == 100)
                                {
                                    RefreshDataGridView(ModelCsvData.Count);
                                }
                            }

                            pb_Progress.Value = Convert.ToInt32(eve.ProgressValue);
                        }, k);
                    }, f => ConvertCsvRowToTestProductData(f), 1000);
                }
                finally
                {
                    csv?.Close();
                    sc?.Stop();
                    Sync.Post(k =>
                    {
                        tb_Times.Text = k.ToString();
                    }, sc.Elapsed.TotalSeconds.ToString());
                }
            }
        }
示例#3
0
        /// <summary>
        /// 异步写入csv
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        private async Task WriteData(string fileName)
        {
            if (ModelCsvData != null)
            {
                Stopwatch      sc  = null;
                CsvWriteHelper csv = null;

                try
                {
                    sc = Stopwatch.StartNew();

                    CsvFlag flag = new CsvFlag(Convert.ToChar(cob_separator.Text), Convert.ToChar(cob_FieldEnclosed.Text));
                    csv = new CsvWriteHelper(fileName, Encoding.UTF8, flag, f =>
                    {
                        Sync.Post(t =>
                        {
                            double val        = (t as CsvWriteProgressInfo).WirteRowCount / (double)(ModelCsvData.Count + (cob_FirstIsHead.SelectedIndex == 0 ? 1 : 0));
                            pb_Progress.Value = Convert.ToInt32(val * 100);
                        }, f);
                    }, CancelSource.Token, 1000);

                    if (ColumnsName != null)
                    {
                        await csv.WriteLineAsync(ColumnsName);
                    }

                    await csv.WriteAsync(ModelCsvData, f => ConvertModelToRowData(f));

                    await csv.FlushAsync();
                }
                finally
                {
                    csv?.Close();
                    sc?.Stop();
                    Sync.Post(k =>
                    {
                        tb_Times.Text = k.ToString();
                    }, sc.Elapsed.TotalSeconds.ToString());
                }
            }
        }
示例#4
0
        /// <summary>
        /// 异步读取csv
        /// </summary>
        /// <returns></returns>
        private async Task ReadData()
        {
            if (!string.IsNullOrWhiteSpace(this.tb_FileName.Text))
            {
                Stopwatch     sc  = null;
                CsvReadHelper csv = null;

                try
                {
                    this.modelCsvData = null;
                    CsvFlag flag = new CsvFlag(Convert.ToChar(this.cob_separator.Text), Convert.ToChar(this.cob_FieldEnclosed.Text));
                    csv = new CsvReadHelper(this.tb_FileName.Text, Encoding.UTF8, flag, !Convert.ToBoolean(this.cob_FirstIsHead.SelectedIndex), 40960);

                    Progress <CsvReadProgressInfo <TestProductModel> > prog = new Progress <CsvReadProgressInfo <TestProductModel> >(e =>
                    {
                        this.sync.Post(f =>
                        {
                            var eve = f as CsvReadProgressInfo <TestProductModel>;

                            if (eve.CurrentRowsData != null)
                            {
                                if (this.modelCsvData == null)
                                {
                                    InitDataGridView(eve.ColumnNames);
                                    this.modelCsvData = eve.CurrentRowsData;
                                }
                                else
                                {
                                    this.modelCsvData.AddRange(eve.CurrentRowsData);
                                }

                                this.RefreshDataGridView(this.modelCsvData.Count);
                            }

                            this.pb_Progress.Value = Convert.ToInt32(eve.ProgressValue);
                        }, e);
                    });

                    sc = Stopwatch.StartNew();
                    //因为 ui 线程同步执行 ReadAsync 中的部分代码, 所以用 Task.Run 在其它线程中执行, 避免 ui 阻塞.
                    await Task.Run(async() =>
                    {
                        await csv.ReadAsync(prog, f =>
                        {
                            return(ConvertCsvRowToTestProductData(f));
                        }, this.cancelSource.Token, 1000);
                    }, this.cancelSource.Token);
                }
                finally
                {
                    if (csv != null)
                    {
                        csv.Close();
                    }

                    if (sc != null)
                    {
                        sc.Stop();
                    }

                    this.sync.Post(k =>
                    {
                        this.tb_Times.Text = k.ToString();
                    }, sc.Elapsed.TotalSeconds.ToString());
                }
            }
        }
示例#5
0
 /// <summary>
 /// 静态构造函数
 /// </summary>
 static CsvFlag()
 {
     FlagForRFC4180 = new CsvFlag(',', '"');
 }