Освободить изображение из формы обработки PictureBoxC#

Место общения программистов C#
Ответить
Anonymous
 Освободить изображение из формы обработки PictureBox

Сообщение Anonymous »

У меня возникла проблема с ошибкой «System.IO.IOException: процесс не может получить доступ к файлу «I:\User\Image\BarCodes\QTY.png», поскольку он используется другим процессом. At System.IO.__Error .WinIOError(Int32 errorCode, String MaybeFullPath)"

Я знаю, что эта ошибка вызвана тем, что какая-то другая программа той же программы использует этот процесс или, по крайней мере, я так думаю.

Вот кнопка, вызывающая эту ошибку

Код: Выделить всё

private void createbtn_Click(object sender, EventArgs e)
{
InsertBarCodeImage();

}

private void InsertBarCodeImage()
{
try
{
if (qtytxt.Text !=  String.Empty)
{
Picturebox1.Image = null;

BarCode insertBarCode = new BarCode();

insertBarCode.InsertBarCode(qtytxt.Text, Picturebox1.Image);

Picturebox1.Image = new Bitmap(insertBarCode.BARCODEQUANTITYNAMERUTE);

Picturebox1.SizeMode = PictureBoxSizeMode.StretchImage;

MessageBox.Show("Label created");

}
else
{
MessageBox.Show("Please enter qty", "Verify", MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}
catch (Exception e)
{
MessageBox.Show(e.ToString());
}
}
Класс

Код: Выделить всё

class BarCode
{
public string BARCODEQUANTITYNAMERUTE { get; set; }

public void InsertBarCode(string quantity, Image quantityImage)
{

BARCODEQUANTITYNAMERUTE = @"I:\User\Image\BarCodes\QTY.png";

try
{

Bitmap quantityBarCode = CreateBarCode("*" + quantity + "*");

if (System.IO.File.Exists(BARCODEQUANTITYNAMERUTE))
System.IO.File.Delete(BARCODEQUANTITYNAMERUTE);

quantityBarCode.Save(BARCODEQUANTITYNAMERUTE, System.Drawing.Imaging.ImageFormat.Png);
quantityImage = new Bitmap(BARCODEQUANTITYNAMERUTE);

}
catch (Exception e)
{
Console.WriteLine(e.ToString());
}
}

private Bitmap CreateBarCode(string text)
{
Bitmap barcode = new Bitmap(1, 1);
const string freeThreeOfNine = "Free 3 of 9";
Font fontthreeofnine = new Font(freeThreeOfNine, 40, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point);
Graphics graphics = Graphics.FromImage(barcode);

SizeF datasize = graphics.MeasureString(text, fontthreeofnine);

barcode = new Bitmap(barcode, datasize.ToSize());

graphics = Graphics.FromImage(barcode);

graphics.Clear(Color.White);

graphics.TextRenderingHint = TextRenderingHint.SingleBitPerPixel;

graphics.DrawString(text, fontthreeofnine, new SolidBrush(Color.Black), 0, 0);

graphics.Flush();

fontthreeofnine.Dispose();
graphics.Dispose();

return barcode;
}
}
Таким образом, ошибка возникает, когда событие щелчка происходит во второй раз в режиме онлайн.

Код: Выделить всё

if (System.IO.File.Exists(BARCODEQUANTITYNAMERUTE))
System.IO.File.Delete(BARCODEQUANTITYNAMERUTE);
он ​​пытается удалить предыдущее изображение события первого клика, как я могу остановить процесс, чтобы он мог удалить изображение и заново создать его с текущим текстом значение и показать его в PictureBox???

Я использую

Код: Выделить всё

PictureBox1.Image = null;
но безуспешно

Буду признателен за любую помощь.

Кроме того, если бы вы были достаточно любезны и указали на какие-либо передовые методы в комментариях, это помогло бы мне.

Редактировать (Помощь от @) HansPassant) изменил InsertBardCode в классе

Код: Выделить всё

public Image InsertBarCode(string barCodeString)
{
Bitmap barCodeImage = CreateBarCode("*" + barCodeString + "*");

return barCodeImage;
}
швы работают очень хорошо

Подробнее здесь: https://stackoverflow.com/questions/335 ... picturebox
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»