首页 > 解决方案 > 如何在 c# blazor 中每分钟安排一次任务

问题描述

我需要每分钟安排一次工作,实际上,我需要比较文件的日期时间,看看它是否是新的,如果是,我使用这个文件的数据来填充另一个 excel 文件

我发现了一些计时器示例的想法,并且仅使用 console.writeline 作为示例,它就可以很好地工作,但是当我要求像我说的那样做更大的事情时,它不起作用....

Startup.cs
  in the Configure() method

            var startTimeSpan = TimeSpan.Zero;
            var periodTimeSpan = TimeSpan.FromMinutes(1);

            var timer = new System.Threading.Timer((e) =>
            {
          try
            {
                string filePath = $"{Directory.GetCurrentDirectory()}{@"\wwwroot\Ressources\mydatafile.txt"}";
                DataTable tbl = new DataTable();
                string[] lines = System.IO.File.ReadAllLines(filePath);
                var titrecolunTest = lines[0].Split('\t');

                foreach (var titrecolon in titrecolunTest)
                {
                    tbl.Columns.Add(new DataColumn(titrecolon.ToString()));
                }

                foreach (string line in lines.Skip(1))
                {
                    var cols = line.Split('\t');

                    DataRow dr = tbl.NewRow();
                    for (int cIndex = 0; cIndex < cols.Length; cIndex++)
                    {
                        dr[cIndex] = cols[cIndex];
                    }

                    tbl.Rows.Add(dr);
                }


                string fileNameTEST = @"wwwroot/Ressources/Template.xlsx";
                FileInfo fileInfo = new FileInfo(fileNameTEST);
                using (ExcelPackage pck = new ExcelPackage(fileInfo))
                {
                    ExcelWorksheet worksheetData = pck.Workbook.Worksheets["Data"];
                    worksheetData.Cells["A2"].LoadFromDataTable(tbl, false);
                    //mettre number format sur les collones AC AI AJ AK AL AM AN

                    int nbrRows = worksheetData.Dimension.End.Row;

                    foreach (var cell in worksheetData.Cells["AI2:AN" + nbrRows])
                    {
                        cell.Value = Convert.ToDouble(cell.Value);
                    }

                    foreach (var cell in worksheetData.Cells["AC2:AC" + nbrRows])
                    {
                        cell.Value = Convert.ToDouble(cell.Value);
                    }
                    worksheetData.Cells["AI2:AN" + nbrRows].Style.Numberformat.Format = "0";
                    worksheetData.Cells["AC2:AC" + nbrRows].Style.Numberformat.Format = "0";

                    pck.Save();
                }
            }
            catch (Exception)
            {

                throw;
            }
            }, null, startTimeSpan, periodTimeSpan);

标签: c#.netblazor-server-side

解决方案


我通过使用 HangFire 找到了一个解决方案,它有 nugets 和一些 youtube tuto 来展示它是如何工作的。真的好用!


推荐阅读