gpt4 book ai didi

ajax - MVC4 Ajax 在执行下一个进程之前等待

转载 作者:行者123 更新时间:2023-12-03 17:52:55 25 4
gpt4 key购买 nike

在我的 MVC 项目中,我生成了一个图像数组并将该数组存储为 session 变量,我使用滑动条为图像设置动画,并通过计算鼠标按下时第一次单击和 x 位置之间的距离来检测鼠标按钮按下时的鼠标移动在 Canvas 上移动。

在我使用的 Controller 中:

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() {
}
});

我有两个问题,首先更新 View 需要时间并跳过一些图像,第二个是它打开了许多线程,如果许多用户访问同一页面,它会变慢。我想过使用异步,但我仍在使用 c# 4,这可能需要对我的代码进行大量更改。我正在阅读有关 SignalR 的信息,我的问题是可以这样做(前提是我只更新用户屏幕而不是所有用户)还是有更好的解决方案。

我想实现的事件顺序是:
  • Ajax 向第一个操作发送请求或生成第一个图像并等待
  • 当图像生成时,Ajax 接收成功,然后使用第二个 Action 在屏幕上显示图像
  • 然后第一个 Action 生成第二个图像

  • 我看到的挑战是第一张图像无需等待就不断生成图像,所以我的问题是如何让第一个 Action 等待,以及如何向它发送消息以生成以下图像。

    我刚刚安装了VS2012 c#5,有没有可以帮我的例子!!感谢您的建议,提前致谢。

    最佳答案

    使用 TPL,您可以尝试这个(使用上面的代码),同样可以应用于 animate 方法:

            public ActionResult ImageOut(int udm = 0)
    {
    FileContentResult data = null;
    Image objImage = null;
    Task.Run(() =>
    {
    Bitmap im = MySession.Current.dicomImage;
    objImage = im.Bitmap(outputSize, PixelFormat.Format24bppRgb, m);
    using (var memStream = new MemoryStream())
    {
    objImage.Save(memStream, ImageFormat.Png);
    data = this.File(memStream.GetBuffer(), "image/png");
    }
    });
    objImage.Dispose();
    return data;
    }

    Task.Run 只是 Task.Factory.StartNew 的简写

    关于ajax - MVC4 Ajax 在执行下一个进程之前等待,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16757165/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com