创建了一个位图变量来获得像素颜色,我如何停止使用该文件以便进行文件删除

本文关键字:文件 何停止 删除 颜色 一个 位图 像素 变量 创建 | 更新日期: 2023-09-27 18:20:41

我有一个弹出的简单警报表单,我试图根据图像中像素的颜色生成不同的消息,警报的加载代码是:

        private void Alert_Load(object sender, EventArgs e)
        {
            Bitmap myBitmap = new Bitmap(Properties.Settings.Default.AlertFile);
            Color pixelColor = myBitmap.GetPixel(50, 50);
            File.Delete(Properties.Settings.Default.AlertFile);
            if (pixelColor == Color.FromArgb(255, 237, 28, 36))//red
            {
                AlertMessage.Text = "Test Message 1: It is Red";
            }
            else
            {
                AlertMessage.Text = "Test Message 2: It isn't Red";
            }
            TopMost = true;
        }

无论File.Delete行在哪里,我都会收到文件正在使用中,无法删除的消息。

我在使用FileSystemWatcher之前遇到过这个问题,我无法删除仍在使用的文件,我不得不停止观察程序,但在这种情况下,我不知道如何解决它。

文件在此处开始使用:

        Bitmap myBitmap = new Bitmap(Properties.Settings.Default.AlertFile);

我试着添加:

myBitmap.Dispose();

但我仍然得到它正在使用的信息。

编辑:

使用修复

            Color pixelColor;
            using (var AlertImage = new Bitmap(Properties.Settings.Default.AlertFile))
            {
                pixelColor = AlertImage.GetPixel(50, 50);
                AlertImage.Dispose();
                File.Delete(Properties.Settings.Default.AlertFile);
                if (pixelColor == Color.FromArgb(255, 237, 28, 36))
                {
                    AlertMessage.Text = @"It was Red :)";
                }
                else
                {
                    AlertMessage.Text = @"It was not Red :(";
                }
            }

创建了一个位图变量来获得像素颜色,我如何停止使用该文件以便进行文件删除

尝试采用Using Statement,它提供了一种方便的语法,可以确保正确使用FileBitmapIDisposable对象。

这是正确的语法:您不需要在AlertImage上调用.Dispose

Color pixelColor;
using (var AlertImage = new Bitmap(Properties.Settings.Default.AlertFile))
{
    pixelColor = AlertImage.GetPixel(50, 50);
}
File.Delete(Properties.Settings.Default.AlertFile);
if (pixelColor == Color.FromArgb(255, 237, 28, 36))
{
    AlertMessage.Text = @"It was Red :)";
}
else
{
    AlertMessage.Text = @"It was not Red :(";
}