2009-06-30 7 views
3

バーコードフォントを使用してバーコードイメージを作成しようとするとエラーが発生します。これは、プロダクションでは発生しているが、開発者ではない。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; 
    } 
    } 
} 

このコードは、ループ内で呼び出されています。開発環境では正常に動作しますが(winformsアプリケーションで.net 3.5 SP1を使用してWin XP Pro上で)ライブでは、2つのバーコードが作成され、3回目に例外が発生します。私は、問題を引き起こしているものを見つけることができません

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 

が、Googleはそれ原因アンマネージコードへの呼び出しのように見える検索し、私は避難所」から:

&スタックトレースを提起されている例外があります解決策が見つかりませんでした。

誰でも?

+0

違いがあるかどうかを確認するために別のフォントを試してみましたか? .Dispose()をGraphicsオブジェクトbtwに対して2回呼び出しています。 –

+0

ええ、私は別のフォント(現在のバーコードフォント)を使用しようとしましたが、別の(通常の)埋め込みフォントを使用しましたが、システムフォントも参照しました。 g.Dispose()が取り出されましたが、それでも同じです –

+0

ClickOnceによってアプリケーションがデプロイされました - これが問題の一部であるかどうか疑問に思っています –

答えて

0

あなたは)

g.Dispose(次の行を削除してみてくださいでした。

を使用すると、すでに処分されます。

関連する問題