在我的 MVC 项目中,我生成了一个图像数组并将该数组存储为会话变量,我使用滑块为图像设置动画,并通过计算鼠标按下时第一次单击和 x 位置之间的距离来检测鼠标按钮按下时的鼠标移动在画布上移动。
在我使用的控制器中:
public ActionResult Animate(int slice = 0, int udm = 0)
{
FileContentResult data;
Image objImage = null;
Bitmap im = null;
try
{
im = MySession.Current.imageArray[slice];
....
MySession.Current.image = im;
}
else
{
return RedirectToAction("Index",new {.... });
}
}
catch { }
return null;
}
和
public ActionResult ImageOut(int udm = 0)
{
FileContentResult data;
Image objImage = null;
Bitmap im = null;
im = MySession.Current.image;
...
objImage = im.Bitmap(outputSize, PixelFormat.Format24bppRgb, m);
MemoryStream ms1 = new MemoryStream();
using (var memStream = new MemoryStream())
{
objImage.Save(memStream, ImageFormat.Png);
data = this.File(memStream.GetBuffer(), "image/png");
}
objImage.Dispose();
return data;
}
从我使用 Ajax 的角度来看:
$.ajax({
url: '/Home/Animate',
type: 'POST',
async: false,
data: {
slice: ((lastX - firstX) + nSlice),
udm: ++udm
},
success: function(data) {
if (data.udm) {
nSlice = (data.slice);
image.src = '/Home/ImageOut?' + $.param({
udm: data.udm
});
}
},
error: function() {
}
});
我有两个问题,首先需要时间来更新视图并跳过一些图像,其次是它打开了许多线程,如果许多用户访问同一页面,它会变慢。我想过使用异步,但我仍在使用 c# 4,这可能需要对我的代码进行大量更改。我正在阅读有关 SignalR 的信息,我的问题是可以这样做(假设我只是更新用户屏幕而不是所有用户)还是有更好的解决方案。
我想实现的事件顺序是:
- Ajax 向第一个动作发送请求或生成第一个图像并等待
- 当图像生成时,Ajax 接收成功,然后使用第二个动作在屏幕上显示图像
- 然后第一个动作生成第二个图像
我看到的挑战是第一个图像不断生成图像而不等待,所以我的问题是我如何让第一个动作等待,以及如何向它发送消息以生成以下图像。
我刚刚安装了VS2012 c#5,有没有可以帮助我的例子!!非常感谢您的建议,在此先感谢。