如何从含foreach循环的返回bool方法中获取计数器值并返回至浏览器?
解决方法:获取Excel读取计数器并通过轮询返回至浏览器
嘿,我来帮你搞定这两个问题!咱们一步一步来:
1. 从ReadExcelFile方法获取计数器值
你已经在方法参数里定义了out int tCount,这其实是最直接的方式——只要在方法结束前把计数器的值赋值给这个out参数就行,根本不需要额外用委托(当然如果有特殊场景想用委托我也会给你例子)。
修改后的ReadExcelFile方法:
public static bool ReadExcelFile(string str1, int Id, out int tCount) { int primaryCounter = 0; foreach (var item in excelList) { primaryCounter++; // 这里可以添加你的插入逻辑 } // 把计数器值赋值给out参数,外部调用时就能拿到了 tCount = primaryCounter; return true; }
调用方法时获取计数器:
int totalProcessed; bool result = ReadExcelFile("yourString", 123, out totalProcessed); // 现在totalProcessed就是foreach循环的最终计数器值了
如果想用委托实现实时计数器更新:
如果你的Excel读取过程比较慢,想在循环时实时传递计数器值(比如给UI或者轮询接口提供实时数据),可以加一个Action<int>类型的参数:
public static bool ReadExcelFile(string str1, int Id, Action<int> counterCallback) { int primaryCounter = 0; foreach (var item in excelList) { primaryCounter++; // 每次循环触发委托,把当前计数器传出去 counterCallback?.Invoke(primaryCounter); // 执行你的插入逻辑 } return true; }
调用时可以把计数器值存储到Session或静态变量(供轮询接口读取):
ReadExcelFile("yourString", 123, currentCount => { // 把当前计数器存入Session,方便轮询接口获取 HttpContext.Current.Session["ExcelProcessCount"] = currentCount; });
2. 通过jQuery轮询获取计数器值
接下来是InsertPolling Action,咱们需要让它返回当前的计数器值,前端用jQuery定时请求这个接口。
后端InsertPolling Action:
public ActionResult InsertPolling() { // 读取之前存储的计数器值——可以是Session、静态变量或者数据库(根据你的场景选择) int currentCount = HttpContext.Session["ExcelProcessCount"] != null ? (int)HttpContext.Session["ExcelProcessCount"] : 0; // 返回JSON格式的数据,允许前端请求 return Json(new { ProcessedCount = currentCount }, JsonRequestBehavior.AllowGet); }
前端jQuery轮询代码:
// 每1秒发起一次轮询请求 setInterval(function() { $.get('/YourController/InsertPolling', function(response) { // 更新页面上的计数器显示,比如放到id为process-counter的元素里 $('#process-counter').text('已处理条目:' + response.ProcessedCount); }); }, 1000);
注意:如果是ASP.NET Core项目,Session的配置和使用方式会略有不同,需要先在Startup中配置Session中间件;另外如果Excel读取是异步操作,要注意线程安全问题哦!
内容的提问来源于stack exchange,提问作者Paul Thompson
相关产品推荐
相关产品推荐

