Необходимо удалить файл, используемый моим собственным приложением - PullRequest
2 голосов
/ 19 февраля 2010

Я возлюсь с настольным гаджетом (часами). Под ним есть эффект отражения, который должен быть прозрачным, и я использую CopyFromScreen, чтобы получить фон, а затем просто устанавливаю фон формы на это.

Примерно так (часть кнопки «закрепить / отменить»):

        Rectangle bounds = this.Bounds;

        using (Bitmap ss = new Bitmap(bounds.Width, bounds.Height))
        using (Graphics g = Graphics.FromImage(ss))
        {
            this.Opacity = 0;

            g.CopyFromScreen(this.Location, Point.Empty, bounds.Size);
            ss.Save(@"C:\clock1s\bg", ImageFormat.Png);

            this.Opacity = 100;
            this.BackgroundImage = new Bitmap(@"C:\clock1s\bg");

            g.Dispose();
        }

Теперь, когда бы я ни захотел использовать это снова (например, переместить часы), я не могу удалить этот файл или восстановить его, потому что он используется в данный момент. Я уже пытался настроить форму BG на что-то другое, но это не сработало.

Как мне идти?

РЕДАКТИРОВАТЬ: Сортировка, спасибо (Лэнс Макнирни).

А что если у есть , чтобы сохранить его в файл?

Также бонусный вопрос:

проклятый батвот http://upload.snelhest.org/images/100219batwatch.jpg

Выбор и значки, заканчивающиеся под формой, являются небольшим раздражением, и, если возможно, я бы хотел, чтобы они заканчивались сверху или снизу (сохраняя плавное сглаживание). Я предполагаю, что это выход из моего запаса, чтобы исправить все же.

1 Ответ

6 голосов
/ 19 февраля 2010

Вам действительно нужно сохранить изображение в файловую систему? Разве вы не можете хранить его в памяти только для своего приложения (и у вас больше не будет проблем)?

A MemoryStream должен работать в качестве замены для пути к файлу в вашем коде (хотя я, очевидно, не могу скомпилировать его для тестирования):

Rectangle bounds = this.Bounds;

using (Bitmap ss = new Bitmap(bounds.Width, bounds.Height))
using (Graphics g = Graphics.FromImage(ss))
{
    this.Opacity = 0;
    g.CopyFromScreen(this.Location, Point.Empty, bounds.Size);

    using(MemoryStream ms = new MemoryStream()) {
        ss.Save(ms, ImageFormat.Png);

        this.Opacity = 100;
        this.BackgroundImage = new Bitmap(ms);
    }

    g.Dispose();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...