私の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() {
}
});
私には 2 つの問題があります。1 つ目は、ビューの更新に時間がかかり、多数の画像がスキップされることです。2 つ目は、多くのスレッドが開かれ、多数のユーザーが同じページにアクセスすると速度が低下することです。非同期を使用することを考えましたが、まだ c# 4 を使用しているため、コードに多くの変更が必要になる場合があります。私はSignalRについて読んでいました.私の質問は、これを行うことができるか(すべてのユーザーではなくユーザー画面を更新するだけであれば)、またはより良い解決策があるかどうかです.
私が達成したい一連のイベントは次のとおりです。
- Ajaxは最初のアクションにリクエストを送信するか、最初の画像を生成して待機します
- 画像が生成されると、Ajax は成功を受け取り、2 番目のアクションを使用して画像を画面に表示します
- 次に、最初のアクションが2番目の画像を生成します
私が目にする課題は、最初の画像が待機せずに画像を生成し続けることです。私の質問は、最初のアクションを待機させる方法と、それにメッセージを送信して次の画像を生成する方法です。
VS2012 c#5 をインストールしたばかりですが、参考になる例はありますか !! よろしくお願いします。