Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2012, 13:21   #1
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию программа на C# (записать файлы на CD/DVD)

Подскажите литературу или статьи пожалуйсто! какие библиотеки использовать(вроде IMAPI2) или что-то другое!
(желательно на русском)!
Fedosss вне форума Ответить с цитированием
Старый 23.05.2012, 21:23   #2
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Неужели не кто не сталкивался с подобной проблемой!?
Fedosss вне форума Ответить с цитированием
Старый 24.05.2012, 09:44   #3
wm_leviathan
Форумчанин
 
Аватар для wm_leviathan
 
Регистрация: 17.02.2010
Сообщений: 399
По умолчанию

сталкивался и ест ьпрекрасный исходник, скорее даже готовая программа для записи CD\DVD ссылка будет висеть 10 дней http://zalil.ru/33298049
wm_leviathan вне форума Ответить с цитированием
Старый 28.05.2012, 22:36   #4
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Спасибо! попробую разобраться!
Fedosss вне форума Ответить с цитированием
Старый 05.06.2012, 14:47   #5
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Часть 1
Здраствуйте!
Столкнулся с такой проблемой в коде:
При на жатии на конпку очитки диска запускается следующий код:
Код:
        private void buttonFormat_Click(object sender, EventArgs e)
        {
            if (devicesComboBox.SelectedIndex == -1)
            {
                return;
            }

            _isFormatting = true;
            EnableFormatUI(false);

            var discRecorder =
                (IDiscRecorder2)devicesComboBox.Items[devicesComboBox.SelectedIndex];
            backgroundFormatWorker.RunWorkerAsync(discRecorder.ActiveDiscRecorder);
        }
Элемент backgroundWorker (Name=backgroundFormatWorker) используется для запуска процесса очистки диска в другом процессе!
На странице http://msdn.microsoft.com/ru-ru/library/ywkkz4s1.aspx написано как использовать этот элемент:
1) Свойство WorkerReportsProgress задаем true;
2) Свойстово WorkerSupportsCancellation также задаем true;
Далее надо обработать 3-и события(следуя порядку)
1)Событие №1 DoWork (я так понял это событие происходит перед началом запуска нового процесса, ну или начинает его):
В примере исходника оно выглядит так:
Код:
        private void backgroundFormatWorker_DoWork(object sender, DoWorkEventArgs e)
        {
            MsftDiscRecorder2 discRecorder = null;
            MsftDiscFormat2Erase discFormatErase = null;

            try
            {
                //
                // Create and initialize the IDiscRecorder2
                //
                discRecorder = new MsftDiscRecorder2();
                var activeDiscRecorder = (string)e.Argument;
                discRecorder.InitializeDiscRecorder(activeDiscRecorder);

                //
                // Create the IDiscFormat2Erase and set properties
                //
                discFormatErase = new MsftDiscFormat2Erase
                    {
                        Recorder = discRecorder,
                        ClientName = ClientName,
                        FullErase = !checkBoxQuickFormat.Checked
                    };

                //
                // Setup the Update progress event handler
                //
                discFormatErase.Update += discFormatErase_Update;

                //
                // Erase the media here
                //
                try
                {
                    discFormatErase.EraseMedia();
                    e.Result = 0;
                }
                catch (COMException ex)
                {
                    e.Result = ex.ErrorCode;
                    MessageBox.Show(ex.Message, "IDiscFormat2.EraseMedia failed",
                        MessageBoxButtons.OK, MessageBoxIcon.Stop);
                }

                //
                // Remove the Update progress event handler
                //
                discFormatErase.Update -= discFormatErase_Update;

                //
                // Eject the media 
                //
                if (checkBoxEjectFormat.Checked)
                {
                    discRecorder.EjectMedia();
                }

            }
            catch (COMException exception)
            {
                //
                // If anything happens during the format, show the message
                //
                MessageBox.Show(exception.Message);
            }
            finally
            {
                if (discRecorder != null)
                {
                    Marshal.ReleaseComObject(discRecorder);
                }

                if (discFormatErase != null)
                {
                    Marshal.ReleaseComObject(discFormatErase);
                }
            }
        }
Как я понял сам процесс очистки запускается методом discFormatErase.EraseMedia(); , где discFormatErase - экземпляр MsftDiscFormat2Erase .
Так вот перед началом очистки к событию Update этого экземпляра привязывается обработчик discFormatErase_Update (посредством кода discFormatErase.Update += discFormatErase_Update; )
Код:
        void discFormatErase_Update([In, MarshalAs(UnmanagedType.IDispatch)] object sender, int elapsedSeconds, int estimatedTotalSeconds)
        {
            var percent = elapsedSeconds * 100 / estimatedTotalSeconds;
            //
            // Report back to the UI
            //
            backgroundFormatWorker.ReportProgress(percent);
        }
Как мне стало понятно(я могу ошибаться только разбираюсь в этом коде) это событие посредством кода backgroundFormatWorker.ReportProgre ss(percent); передает событию №2( а именно private void backgroundFormatWorker_ProgressChan ged) информацию о процессе очистки!

Продолжение Следует!
Fedosss вне форума Ответить с цитированием
Старый 05.06.2012, 15:01   #6
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Часть 2
2) Событие №2 ProgressChanged( как я понял событие происходит во время выполнения второго потока)
Код:
        private void backgroundFormatWorker_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            labelFormatStatusText.Text = string.Format("Formatting {0}%...", e.ProgressPercentage);
            formatProgressBar.Value = e.ProgressPercentage;
        }
Как видно оно выдает на форму информацию о процессе Очистки дмска!
3) Событие №3 RunWorkerCompleted( как я понял происходит после завершения нового процесса )
Код:
        private void backgroundFormatWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            labelFormatStatusText.Text = (int)e.Result == 0 ?
                "Finished Formatting Disc!" : "Error Formatting Disc!";

            formatProgressBar.Value = 0;

            _isFormatting = false;
            EnableFormatUI(true);
        }
Оно информирует благодаря значению RunWorkerCompletedEventArgs e.Result как закончилась Очистка!
Вроде все понятно и должно работать НО:
У меня не работает ослеживания процесса очитски (та которая в %), а именно нет события №2 вообще!
Используя класс Console Я поставил в разные мест программы метки!
Как стало ясно не запускается обработчик события Update :
Код:
        void discFormatErase_Update([In, MarshalAs(UnmanagedType.IDispatch)] object sender, int elapsedSeconds, int estimatedTotalSeconds)
        {
            var percent = elapsedSeconds * 100 / estimatedTotalSeconds;
            //
            // Report back to the UI
            //
            backgroundFormatWorker.ReportProgress(percent);
Которое как мне кажется не вызывает событие №2 ( вроде должно вызывать строчкой backgroundFormatWorker.ReportProgre ss(percent); )
Поэтому я вижу:
1) как запускается метод discFormatErase.EraseMedia();
2) как работает обработчик события №1.
2) как работает обработчик События №3.

Весь вечер убил не как не могу понять в чем проблема??????
И еще по ходу работы возник вопрос что за параметр в обработчике Update: [In, MarshalAs(UnmanagedType.IDispatch)] object sender
Ведь если использовать автоматическую генерацию кода по событиям там другая картина: object @object(что-то типа указателей С++), и так и так не работает.
Помогите пожалуйсто кто понимает в этом!

Последний раз редактировалось Fedosss; 05.06.2012 в 15:04.
Fedosss вне форума Ответить с цитированием
Старый 07.06.2012, 12:39   #7
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Сново сдраствуйте!
Появилась еще одна проблема при записии файлов на диск!
а именно:
Код:
Unable to cast object of type 'IMAPI2FS.FsiStreamClass' to type 'IMAPI2.IStream'
Вроде как сама Microsoft признала что базовые сборки imapi2.dll и imapi2fs.dll плохо работают и выпустила проект под названием IBurn в Windows Vista SDK. Там есть файл Interop.cs в котором решена эта проблема!
Если есть у кого помогите с файлом, а то не могу найти в интернете!
Fedosss вне форума Ответить с цитированием
Старый 08.06.2012, 17:16   #8
Utilisator
Новичок
Джуниор
 
Аватар для Utilisator
 
Регистрация: 07.06.2012
Сообщений: 1
По умолчанию Simple burner in C#

привет , вот помотри исходники если че будет непонятно пиши в аську 422616725
Вложения
Тип файла: zip BurnMedia_src.zip (206.4 Кб, 48 просмотров)
Utilisator вне форума Ответить с цитированием
Старый 11.06.2012, 20:40   #9
Fedosss
Пользователь
 
Регистрация: 14.02.2012
Сообщений: 41
По умолчанию

Привет Utilisator. Ну я так по нему и разбирался!
Проблему с потоками вроде решил. Используя файл Interop.cs!
Но первая проблема с отслеживанием процесса очистки и записи Актуальна!
Fedosss вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Записать DVD (VIDEO_TS папку на DVD диск) Altera Софт 14 30.03.2013 21:05
Как записать файлы на CD/DVD Fedosss Свободное общение 7 22.05.2012 20:31
Где (и как называется) программа для записи DVD Freeware Alex Cones Софт 4 29.08.2009 21:33
Помогите! Как записать DVD из приложения VS (C#) gennadiyk Общие вопросы .NET 1 04.08.2008 13:10