如何在asp.net中使用for循环通过占位符动态填充和显示所有图像



我正在做一个asp.net c# webforms项目。我必须调试一个问题,偶尔我得到"在GDI+中发生的通用错误"错误。这可能是由于太多的人同时访问该网站。为了模拟它,我想创建一个for循环来创建数千个图像并通过占位符显示它。问题是,循环运行时,只显示最后一张图像。我想看到每一个在循环中创建的图像显示在页面上。代码如下:

        protected void btnGenerateBarCode_Click(object sender, System.EventArgs e)
    {
        System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
        var codabar = new ZXing.BarcodeWriter();
        codabar.Options = options;
        codabar.Format = ZXing.BarcodeFormat.CODE_128;
        for (int i = 1000; i < 2000; i++)
            {
                using (Bitmap bitMap = new Bitmap(codabar.Write(i.ToString())))
                {
                    using (MemoryStream ms = new MemoryStream())
                    {
                        bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                        byte[] byteImage = ms.ToArray();
                        Convert.ToBase64String(byteImage);
                        imgBarCode.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(byteImage);
                    }
        //the placeholder control on the page
                    plBarCode.Controls.Add(imgBarCode);
                }
            }
    }
The problem is that, the loop runs and only the last image shows up.

这是因为在循环之外实际上只创建了一个控件。在循环中添加图像创建:

protected void btnGenerateBarCode_Click(object sender, System.EventArgs e)
{
    var codabar = new ZXing.BarcodeWriter();
    codabar.Options = options;
    codabar.Format = ZXing.BarcodeFormat.CODE_128;
    for (int i = 1000; i < 2000; i++)
        {
            using (Bitmap bitMap = new Bitmap(codabar.Write(i.ToString())))
            {
                //  Here create the image control
                System.Web.UI.WebControls.Image imgBarCode = new System.Web.UI.WebControls.Image();
                using (MemoryStream ms = new MemoryStream())
                {
                    bitMap.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
                    byte[] byteImage = ms.ToArray();
                    Convert.ToBase64String(byteImage);
                    imgBarCode.ImageUrl = "data:image/jpeg;base64," + Convert.ToBase64String(byteImage);
                }
                //the placeholder control on the page
                plBarCode.Controls.Add(imgBarCode);
            }
        }
}

最新更新