2009-06-30 3 views
3

바코드 글꼴을 사용하여 바코드 이미지를 만들 때 오류가 발생합니다. 이것은 프로덕션에서는 발생하지만 dev에서는 발생하지 않습니다.DrawString()을 사용하면 GDI + 예외가 발생합니다.

바코드를 생성하는 방법은 다음과 같습니다 여러 바코드가 필요로

/// <summary> 
/// Create a barcode image by writing out a string using a barcode font and save it 
/// </summary> 
/// <param name="barcodeText">The text string of the barcode</param> 
/// <param name="saveLocation">Where to save the file to</param> 
/// <param name="font">The barcode font</param> 
/// <param name="imageFormat">The image format</param> 
private void CreateBarcodeImage(string barcodeText, string saveLocation, System.Drawing.Font font, ImageFormat imageFormat) 
{ 
    // Draw the barcode image 
    using (Bitmap bmp = new Bitmap(500, 75)) 
    { 
    try 
    { 
     using (Graphics g = Graphics.FromImage(bmp)) 
     { 
     g.Clear(_backgroundColour); 
     g.DrawString(barcodeText, font, _foregroundBrush, 10, 0); 
     bmp.Save(saveLocation, imageFormat); 
     g.Dispose(); 
     } 
    } 
    catch (Exception ex) 
    { 
     Log.ErrorException("Exception in LabelPrinter.CreateBarcodeImage()", ex); 
     throw; 
    } 
    } 
} 

이 코드는 루프에서 호출되고있다. dev 환경에서 그것은 잘 작동하지만 winforms 응용 프로그램에서 .net 3.5 SP1을 사용하는 Win XP Pro에서) 2 개의 바코드가 만들어지고 예외가 세 번째로 발생합니다.

예외가 & 스택 추적을 제기되고

은 다음과 같습니다

An unhandled exception has occurred Attempted to read or write protected memory. This is often an indication that other memory is corrupt. 
at System.Drawing.SafeNativeMethods.Gdip.GdipMeasureString(HandleRef graphics, String textString, Int32 length, HandleRef font, GPRECTF& layoutRect, HandleRef stringFormat, GPRECTF& boundingBox, Int32& codepointsFitted, Int32& linesFilled) 
at System.Drawing.Graphics.MeasureString(String text, Font font, SizeF layoutArea, StringFormat stringFormat) 
at System.Drawing.Graphics.MeasureString(String text, Font font) 
at Srcl.WasteTrak.Gui.Documents.LabelPrinter.CreateBarcodeImage(String barcodeText, String saveLocation, Font font, ImageFormat imageFormat) 
in c:\scc\SRCL\SRCL.WasteTrak\SRCL.WasteTrak.Gui\Documents\LabelPrinter.cs:line 60 

내가 문제를 일으키는 무엇인지 찾을 구글에서 원인이 관리되지 않는 코드로 호출 것으로 보인다 검색 할 수는 없지만 내가 천국 ' 해결책을 찾지 못했습니다.

누구나?

+0

다른 글꼴을 사용하여 어떤 차이가 있는지 보셨습니까? .Dispose()를 Graphics 객체 btw에 두 번 호출하려고합니다. –

+0

그래, 나는 다른 글꼴 (현재 하나의 바코드 글꼴)을 사용해 보았고 또 다른 (정상적인) 포함 된 글꼴을 사용했으며 시스템 글꼴을 참조하고 여전히 같은 결과를 보았습니다. g.Dispose()가 꺼내졌지만 여전히 동일합니다. –

+0

ClickOnce에서 응용 프로그램을 배포했습니다. 문제의 일부인지 궁금합니다. –

답변

0

당신은 다음 줄

g.Dispose()를 제거하려고 할 수;

를 사용하면 이미 처분됩니다.

관련 문제