以我MVC項目之前等待我生成圖像陣列和存儲陣列作爲一個會話變量,我動畫使用滑桿的圖像,並通過檢測鼠標移動而鼠標按鍵時,通過計算距離當鼠標在畫布上移動時,在第一次點擊和x位置之間移動。MVC4 Ajax的執行下一個處理
在控制器中使用:
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,我的問題是可以做到這一點(只要我更新用戶屏幕不是所有用戶)或者是否有更好的解決方案。
我想實現的事件順序是:
- 阿賈克斯發送到第一動作的請求或生成第一映像,並等待
- 當生成圖像,阿賈克斯獲得成功,然後使用所述第二動作
- 然後第一動作生成所述第二圖像顯示在屏幕上的圖像
我看到的挑戰是所述第一圖像保持生成伊馬ges沒有等待,所以我的問題是我如何讓第一個動作等待,以及如何發送消息來生成下面的圖像。
我剛剛安裝VS2012 C#5,有沒有例子,可以幫助我!希望你的建議,在此先感謝。
SignalR是1對多的消息很好的解決方案,認購/相比之下發布/廣播到什麼好像你需要用一個1-1的消息。更新到.NET 4.5以使用異步/等待應該沒有問題。否則,您可以使用.NET 4框架中的Task.Factory.StartNew方法始終使用TPL(Task Paralell Library)。 – ianaldo21
謝謝,不幸的是VS2010不支持4.5。 – hncl
這很好,你嘗試過TPL嗎? – ianaldo21