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

时间:2014-09-05 08:42:42

标签: c# winforms file-io bitmap

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

        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 :(";
                }
            }

1 个答案:

答案 0 :(得分:1)

尝试采用Using Statement提供方便的语法,确保正确使用IDisposableFileBitmap个对象。

这是正确的语法:您无​​需在.Dispose上致电AlertImage

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 :(";
}