【问题标题】:Update image in ASP.NET page from memory without refreshing the page从内存更新 ASP.NET 页面中的图像而不刷新页面
【发布时间】:2011-02-04 00:29:34
【问题描述】:
我有一个命令行 C# 服务器和一个 ASP.NET 客户端,它们都通过 .NET Remoting 进行通信。服务器正在以每秒 2 帧的速度发送从网络摄像头抓取的客户端静止图像。我可以通过远程方法调用将图像传递给客户端,图像最终会出现在这个客户端方法中:
public void Update(System.Drawing.Image currentFrame)
{
// I need to display the currentFrame on my page.
}
如何在页面上显示图像而不将图像保存到硬盘?如果它是一个 winForms 应用程序,我可以将 currentFrame 传递给一个图片框,即。 picturebox.Image = currentFrame.
上述Update 方法每秒至少触发2 次。如果客户端是一个 winForms 应用程序,我可以简单地输入picturebox.Image = currentFrame,屏幕上的当前帧会自动更新。如何使用 ASP.NET 实现相同的效果?整个页面是否需要重新加载等?我想基本上让它看起来像一个实时视频源!
【问题讨论】:
标签:
c#
.net
asp.net
image
remoting
【解决方案1】:
您在游戏中遗漏了一个玩家:浏览器。你的问题真的是:我如何让浏览器在互联网上的一些随机计算机上根据服务器中发生的事情更新它正在显示的图像。
答案当然是:你不知道。
您可以将图像放置在 UpdatePanel 中,并根据计时器更新面板。图片的 src 属性的 URL 必须指向您自己的 HttpHandler(.ashx 文件),这将调用服务器以获取最新图片。
永远记住网络是如何工作的:浏览器在控制中,而不是服务器端。
附: .NET Remoting 已被弃用,取而代之的是 WCF。
【解决方案2】:
您需要在服务器上有一个页面或处理程序来呈现图像。这就是它的工作。然后,您可以在显示图像的页面上放置 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 仅用于保持请求的唯一性以防止缓存问题。
无论如何,那是确切的脚本吗?也许不是,我把它写在了我的脑海中,而且我已经有一段时间没有做过类似的事情了。但它应该让您了解如何实现部分客户端独立于服务器端技术。 (此脚本可以在任何页面上,静态或动态呈现。)