如何使用 SignalR 显示进度条

How to show progress-bar using SignalR

当我使用 AJAX 时,它非常简单:

  1. 启动进度条(如提交按钮进度条)
  2. 拨打 AJAX 电话
  3. 调用成功处理程序时,使用您从 AJAX 调用中获得的数据更新 UI 并停止进度条

当我使用 SignalR 时,我会执行以下操作。在服务器上,我的集线器方法没有 return 任何东西(所以我无法更新 UI 并停止进度条)。相反,我为所有客户端(包括发送数据的客户端)调用了类似 ThisDataWasChanged 的​​方法。

我不太确定该怎么做。我的意思是,当然我可以先 return 调用集线器方法的客户端的数据,然后更新所有其他客户端(以某种方式区分它们),但这似乎有点过分了。

您需要在您的 Hub 中执行如下操作 class

中心

public class ProgressBarHub : Hub
{
    public void change()
    {
        // Do some stuff
        Clients.Client(Context.ConnectionId).thisDataWasChanged(progressBarObj);   
    }
}

JS

// Create hub
var hub = $.connection.progressBarHub;

// Connect
$.connection.hub.start().done(function () {
    // Start progress bar?
    // Create a start progress bar method in the hub and call it
    });


hub.client.thisDataWasChanged = function (progressBarObj) {
    //Do something to the progress bar with the progressBarObj that we returned 
};