Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > работа с windows service. и графикой


Автор: limelight 23.10.2010, 21:50
Привет всем.

Написал сервис который каждые 10 секунд добавляет в log файл информацию о текущем времени а также инфу о том что он был запущен либо был завершен.
Захотел решить другую задачу - через определенное время делать принтскрин экрана, создавать файл с именем времени, и сохранять все это. все работает кроме одного - картинка получается пустая, т.е. в этот файл ничего не сохраняется.
В чем может быть проблема? буду благодарен за любую информацию по теме!

Вот код:
Код

private StreamWriter file;
        private FileStream fs;
        private Graphics grfx;
        private Bitmap bmp;
        private string temp;
        //Определяем таймер
        private System.Timers.Timer timer1;
        private const string MY_PATH = @"D:\";
        private const string EXTENSION = ".bmp";

        protected override void OnStart(string[] args)
        {
            file = new StreamWriter(new FileStream("D:\\temp.log",
    System.IO.FileMode.Append));
            this.file.WriteLine("MyFirstService стартовал");
            this.file.Flush();
            //Создаем таймер и выставляем его параметры
            this.timer1 = new System.Timers.Timer();
            this.timer1.Enabled = true;
            //Интервал 10000мс - 10с.
            this.timer1.Interval = 10000;
            this.timer1.Elapsed +=
             new System.Timers.ElapsedEventHandler(this.timer1_Elapsed);
            this.timer1.AutoReset = true;
            this.timer1.Start();
        }

        protected override void OnStop()
        {
            this.timer1.Stop();
            this.file.WriteLine("MyFirstService остановлен");
            this.file.Flush();
            this.file.Close();
        }

        private void timer1_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            //Записываем время в файл или делаем все, что хотим

            this.temp = MyFirstService.MY_PATH + DateTime.Now.ToString("d.M.yyyy-HH.mm.ss") + MyFirstService.EXTENSION;
            this.fs = File.Create(temp);
            this.fs.Close();
            this.bmp = new Bitmap(1280, 800);
            this.grfx = Graphics.FromImage(bmp);
            this.grfx.CopyFromScreen(0, 0, 0, 0, new Size(1280, 800));
            this.bmp.Save(temp);
        }


п.с. в настройках сервиса, ставил галочку - разрешить взаимодействие с рабочим столом. не помогло.
п.п.с забыл добавить. если реализовать тот же функционал ,но только повесив на кнопку в обычном windows forms, то все замечательно работает!

Автор: jonie 27.10.2010, 13:05
ваш сервис запускается на особом десктопе, а не на клиентском. Потому картинка пуста. Взаимодействие в рабочим столом это "косяк" и работать он не будет. Тут мы обсуждали подробнее эту тему: http://forum.vingrad.ru/forum/topic-276608.html

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)