2016-09-17 37 views
0

我正在研究一個asp.net C#webforms項目。我必須在一段時間內調試一個問題,我得到「GDI +中發生的一般錯誤」錯誤。這可能是由於太多人同時訪問該網站。爲了模仿它,我想創建一個for循環來創建數以千計的圖像並通過佔位符顯示它。問題是,循環運行,只有最後一個圖像顯示出來。我希望看到循環中創建的每個圖像都顯示在頁面上。以下是代碼:如何通過佔位符在asp.net中使用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); 
       } 
      } 
    } 
+0

你重新加入了一個相同的控制 - 要麼得到plBarCode.Controls.Add()出你的/下一個循環的,或者把你的新的圖像( ) 在裏面。如果你想使用不同的控件,你需要使用遞增的X/Y點來定位它們。如果你想循環遍歷一個控件,你需要添加一個Load()和一個延遲,否則UI線程將沒有時間在圖像之間進行更新,你只會看到結束幀(就像動畫一樣) –

回答

0
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); 
      } 
     } 
} 
+0

嗨Aristos,此代碼創建多個控件並顯示條形碼。反正有沒有使用單個控件並且圖像被替換爲新的並且循環運行?謝謝 – Massey

+0

@Ocean Direct把它渲染成一個字符串,然後只是將字符串添加到文字上 – Aristos