从内存更新ASP.NET页面中的图像而不刷新页面

时间:2010-04-03 14:50:47

标签: c# .net asp.net image remoting

我有一个命令行C#服务器和一个ASP.NET客户端,它们都通过.NET Remoting进行通信。服务器正在以每秒2帧的速度向网络摄像头发送客户端静止图像。我可以通过远程方法调用将图像传递给客户端,图像最终以此客户端方法结束:

    public void Update(System.Drawing.Image currentFrame)
    {
        // I need to display the currentFrame on my page.
    }
  1. 如何在不将图像保存到硬盘的情况下在页面上显示图像?如果它是一个winForms应用程序,我可以将currentFrame传递到一个图片框即。 picturebox.Image = currentFrame

  2. 上述Update方法每秒至少触发2次。如果客户端是winForms应用程序,我可以简单地放置picturebox.Image = currentFrame,屏幕上的当前帧将自动更新。我如何使用ASP.NET实现相同的效果?整个页面是否需要重新加载等?我想基本上让它看起来像一个实时视频源!

2 个答案:

答案 0 :(得分:1)

您已将一名玩家从游戏中移除:浏览器。您的问题实际上是:如何在互联网上的某台随机计算机上根据服务器中发生的情况更新显示的图像。

答案当然是:你没有。

您可以将图像放在UpdatePanel中,并根据计时器更新面板。图像的src属性的URL必须指向您自己的HttpHandler.ashx文件),这将调用服务器以获取最新图像。

始终记住Web的工作原理:浏览器处于控制之中,而不是服务器端。

P.S。 .NET Remoting已被弃用,转而支持WCF。

答案 1 :(得分:1)

您需要在服务器上有一个页面或处理程序来呈现图像。这是它的工作。然后,您可以在页面上显示javascript,该页面显示作用于计时器的图像(window.setTimeout),并且不断轮询服务器以获取更新的图像。您可能希望在查询字符串中使请求有点动态,因此您不会卡住重新显示缓存的图像而不是服务器提供的新图像。像

这样的东西
<script type="text/javascript" language="javascript">
    i = 0;
    window.setTimeout(updateImage, 500);
    var img = document.getElementById('img_to_update');

    function updateImage() {
        img.src = 'imageRenderer.aspx?req=' + i;
        i += 1;
        window.setTimeout(updateImage, 500);
    }
</script>

i仅用于保持请求唯一以防止缓存问题。

无论如何,这是确切的脚本吗?也许不是,我把它写在了我的脑海里,已经有一段时间了,因为我做了类似的事情。但它应该让您了解如何实现服务器端技术的客户端独立性的一部分。 (此脚本可以在任何页面上,静态或动态呈现。)