我正在做一个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);
}
}
}