2016-03-30 10 views
0

多くのリクエストが入ってくると、いくつかの一般的なgdi +エラーコードが表示されます。ほとんどの場合、この部分にエラーはありません。ジェネリックGDI +エラーが発生しましたQRコード

が、私はエラーがこれは、複数のスレッド(1つのコール= 1つのスレッドによって呼び出され

  string guidString = Guid.NewGuid().ToString(); 
      string dateNowString = DateTime.Now.ToString("ddMMyyyHHmmssfff"); 
      var localFilePath = @"c:\temp\" + dateNowString + ".png"; 

      //Create QrCode on local 
      QrEncoder qrEncoder = new QrEncoder(ErrorCorrectionLevel.M); 
      QrCode qrCode = qrEncoder.Encode(pass.Barcode); 
      Renderer renderer = new Renderer(5, Brushes.Black, Brushes.White); 
      renderer.CreateImageFile(qrCode.Matrix, localFilePath, ImageFormat.Png); 
      /*using (MemoryStream ms = new MemoryStream()) 
      { 
       using (FileStream stream = new FileStream(localFilePath, FileMode.Create)) 
       { 
        renderer.WriteToStream(qrCode.Matrix, ms, ImageFormat.Png); 
       } 
      }*/ 

      //Upload locally saved QR image to AWS S3 
      string bucketName = ConfigurationManager.AppSettings["bucketName"].ToString(); 
      var s3Client = new S3(bucketName, guidString); 
      string key = guidString + dateNowString + ConfigurationManager.AppSettings["FileFormatExtension"].ToString(); 
      qrCodeUrl = s3Client.UploadFile(localFilePath, key); 

      //Delete QrCode image on local 
      if (File.Exists(localFilePath)) 
      { 
       File.Delete(localFilePath); 
      } 

      //Save QrCode Url to BoardingPass Table 
      pass.QrCodeUrl = qrCodeUrl; 
      data.SaveChanges(); 

この部分にあることを信じて、私は同時に、これらのスレッドを実行するようにタスクを適用しています、スレッドは、この部分呼び出すことができます以上)回

ここでスタックトレースが

at System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams)  at Gma.QrCodeNet.Encoding.Windows.Controls.Renderer.CreateImageFile(BitMatrix matrix, String fileName, ImageFormat imageFormat)  at <redacted>API.Helpers.BoardingPassHelper.GenerateQRCode(BoardingPassRequest request) in <redacted>.API\Helpers\BoardingPassHelper.cs:line 972  at BCSBoardingPass.API.Controllers.API.BoardingPassController.GenerateMultiPaxBoardingPass(MBPRequest mbpRequest, Int32 requestIndex, Boolean isMbp) in <redacted>controllers\API\BoardingPassController.cs:line 615 
+1

2つのスレッドが同じファイルを作成しようとしている可能性はありますか?テストするだけの日付サフィックスではなく、実行中のカウンタでファイル名を変更してみてください。 –

答えて

1

だ私たちは、マルチスレッド環境では、ライブラリのバージョンV 0.3を使用してランダム誤差のこの種を持っていました。このランダムな動作を修正することはできませんでしたが、PNGからJPEGに画像フォーマットを切り替えたので、エラーはもう発生しませんでした。

関連する問題