Можно ли отображать более одного изображения из обработчика одновременно?

В заголовке написано, что у меня есть один универсальный обработчик (.ashx), и мне нужно отображать одно изображение одновременно, используя только один обработчик. Спасибо! Я использую asp.net и C# в моем проекте. Все изображения, которые мне нужны для отображения, генерируются динамически. У меня есть один пользовательский веб-элемент управления, который использует этот обработчик для динамического отображения изображений BitMap, созданных в элементе управления изображениями asp. Но когда я использую 2 из этих WebControl одновременно, у меня возникает проблема, потому что оба WebControl отображают одно и то же изображение.

ImageHandler.ashx (Эти эффекты на самом деле не имеют значения, они просто меняют изображение, когда пользователь выбирает опцию в выпадающем списке, это не настоящая проблема.)

public void ProcessRequest(HttpContext context)
{
    string Effect = context.Request.QueryString["Effect"];
    if (Effect == "Normal")
    {
        Bitmap bmp = PanelStepTwo.image;
        context.Response.ContentType = "image/png";
        bmp.Save(context.Response.OutputStream, ImageFormat.Png);
    }
    else if (Effect == "PB")
    {
        Bitmap bmp = PanelStepTwo.imagePB;
        context.Response.ContentType = "image/png";
        bmp.Save(context.Response.OutputStream, ImageFormat.Png);
    }
    else if (Effect == "Sepia")
    {
        Bitmap bmp = PanelStepTwo.imageSepia;
        context.Response.ContentType = "image/png";
        bmp.Save(context.Response.OutputStream, ImageFormat.Png);
    }
}

Вот как называется обработчик. (I - это индекс, поскольку он вызывается в цикле) Usuario.Imagens[i] возвращает URL, например, если 'i' равно 0, Usuario.Imagens[0] возвращает: @ " http://edgeconstrutora.com.br/FotoFacil/Images/he0cy.png"

imgID = i;
var request = WebRequest.Create(Usuario.Imagens[i]);
using (var response = request.GetResponse())
using (var stream = response.GetResponseStream())
{
    image = new Bitmap(stream);
    var ratioX = (double)120 / image.Width;
    var ratioY = (double)120 / image.Height;
    var ratio = Math.Min(ratioX, ratioY);
    var newWidth = (int)(image.Width * ratio);
    var newHeight = (int)(image.Height * ratio);
    proporcao = image.Width / newWidth;
    img.Width = newWidth;
    img.Height = newHeight;
    Effect = "Normal";
    img.ImageUrl = "ImageHandler.ashx?imgID=" + imgID + "&Effect=" + Effect.ToString();
}

1 ответ

Установите для свойства IsReusable значение true, чтобы обрабатывать несколько изображений. Там нет документации MSDN для этого в последний раз, когда я смотрел. Но это то, что я использую для отображения, скажем, списка изображений продуктов.

Другие вопросы по тегам