C#使用SignalR实现进度条
Posted -bobi
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#使用SignalR实现进度条相关的知识,希望对你有一定的参考价值。
- 需求背景 产品觉得在后台处理数据时给前端加个进度条
- 项目框架 .ENT framework4.5 MVC 5.0
- Nuget引入 Microsoft.Owin 系列 2.0.2
- Nuget引入 Microsoft.AspNet.SignalR 系列 2.0.3
- 服务器代码 选择已安装 > Visual C# > Web > SignalR ,然后选择SignalR Hub 类 (v2)
-
using System; using System.Collections.Generic; using System.Linq; using System.Web; using XXX.WMS.Core.Log; using Microsoft.AspNet.SignalR; namespace XXX.WebUI public class SaleBackHub : Hub private void Send(string connectionId, string percent) // Call the addNewMessageToPage method to update clients. try Clients.Client(connectionId).updateProgressbar(percent); catch (Exception ex) LoggerManager.GetInstance().Fatal(ex); public string GetConnectionId() return this.Context.ConnectionId;
- 服务端调用前端action更新进度条
1 //使用外部方式调用Hub类方法 2 var saleBackHub = Microsoft.AspNet.SignalR.GlobalHost.ConnectionManager.GetHubContext<SaleBackHub>(); 3 var percent = 0; 4 if (!string.IsNullOrWhiteSpace(requestDto.ProgressbarKey)) 5 6 percent = (int)((decimal)++progressCount / (decimal)saleBackModelListCount * 100); 7 try 8 9 //调用前端action 更新进度条 10 saleBackHub.Clients.Client(requestDto.ProgressbarKey).updateProgressbar(percent.ToString()); 11 12 catch (Exception ex) 13 14 throw; 15 16
-
- 服务添加Starup.cs
-
using System; using System.Threading.Tasks; using Microsoft.Owin; using Owin; [assembly: OwinStartup(typeof(Frxs.WMS.Management.WebUI.Startup))] namespace xxx.WMS.Management.WebUI public class Startup public void Configuration(IAppBuilder app) // 有关如何配置应用程序的详细信息,请访问 https://go.microsoft.com/fwlink/?LinkID=316888 app.MapSignalR();
-
-
前端代码
-
对应页面引入signalR.js
<script src="@Url.Content("~/Scripts/signalR/jquery.signalR-2.0.3.min.js“)" type="text/javascript"></script> <script src="~/signalr/hubs"></script>
-
初始化signalR 连接 定义后端推送action 渲染进度条 本次用的是jeasyui 进度条弹窗
var chat; var chatConnectionId; function initchatHub() // Reference the auto-generated proxy for the hub. chat = $.connection.saleBackHub; $.connection.hub.logging = true; // Get the user name and store it to prepend to messages. // Set initial focus to message input box. // Start the connection. $.connection.hub.start().done(function () chat.server.getConnectionId().done(function (connectionId) chatConnectionId = connectionId; ); ); // Create a function that the hub can call back to display messages. chat.client.updateProgressbar = function (percent) // Add the message to the page. if (parseInt(percent) <= 100) $.messager.progress(‘bar‘).progressbar(‘setValue‘, percent); //var value = $.messager.progress(‘bar‘).progressbar(‘getValue‘); ; function showProgressbar() $.messager.progress( title: ‘测试进度条‘, interval: 0 //每次进度更新之间以毫秒为单位的时间长度。默认值是 300。 );
-
-
实际效果图
-
参考地址 https://docs.microsoft.com/zh-cn/aspnet/signalr/overview/
以上是关于C#使用SignalR实现进度条的主要内容,如果未能解决你的问题,请参考以下文章