Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253

Попытка чтения или записи в защищенную память

22.10.2021, 14:00. Показов 1270. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите, пожалуйста. В программе воспроизвожу аудиофайл, к примеру так:
C#
1
2
3
4
5
6
7
8
WMPLib.WindowsMediaPlayer WMP= new WMPLib.WindowsMediaPlayer();
private void Button_Click(object sender, EventArgs e)
{
    WMP.URL = Environment.CurrentDirectory + @"/filename.mp3";
    WMP.controls.play();//воспроизвожу
    //далее нужно подписаться на событие изменения состояния, сделал
    WMP.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange);
}
Далее ловим в обработчике:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void WMP_PlayStateChange(int NewState)
{
    if (NewState == (int)WMPLib.WMPPlayState.wmppsMediaEnded)
    {
        //И здесь я хочу запустить другой случайный файл. У меня их допустим 3 и назвал я их 1.mp3, 2.mp3, 3.mp3
        Random rnd = new Random();
        int value = rnd.Next(1, 3);
 
        WMP2.URL = Environment.CurrentDirectory + @"/s/" + Convert.ToString(value) + ".mp3";
        WMP2.controls.play();//воспроизвожу
        //всё работает
        //но мне нужно после завершения этого файла запустить следующий рандомный
        //для этого снова подписываюсь
        WMP2.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange);
    }
}
И вот тут уже, после того, как проиграл самый первый файл, потом первый случайный, вместо того, чтобы воспроизвести второй случайный вылетает исключение из Program.cs - "System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    static class Program
    {
        /// <summary>
        /// Главная точка входа для приложения.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1()); // <-- выдаёт исключение (описание строкой ниже)
            //System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
        }
    }
Если я уберу:
C#
1
WMP2.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange);
и буду много раз нажимать на кнопку, то будет играть самый первый, а потом первый случайный и всё, но надо так, чтобы они автоматически менялись
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
22.10.2021, 14:00
Ответы с готовыми решениями:

Попытка чтения или записи в защищенную память
Hello, ребят, такой вопрос. Есть програмка, суть ее - найти часть картинки на другой, ту что ищем, есть в ресурсах проекта, та на которой...

Попытка чтения или записи в защищенную память
Здравствуйте! Вот такая ошибка: &quot;Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память...

Попытка чтения или записи в защищенную память
Доброго времени суток, форумчане! Возникла такая проблема - при вызове функции из dll(написана на С++) в проекте C# компилятор...

4
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
22.10.2021, 14:26
Mr_Asdshka, попробуйте не подписываться на события каждый раз — вы же с каждым разом увеличиваете количество вызовов.
Подпишитесь один раз при создании объектов.
0
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
22.10.2021, 14:38  [ТС]
C#
1
2
WMPLib.WindowsMediaPlayer WMP2 = new WMPLib.WindowsMediaPlayer();
WMP2.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange);
см.закреп
Миниатюры
Попытка чтения или записи в защищенную память  
0
Эксперт .NET
 Аватар для kolorotur
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
22.10.2021, 15:16
Mr_Asdshka, на событие подписывайтесь в конструкторе или в обработчике события Loaded формы.
В теле класса нельзя прописывать инструкци вне инициализаторов полей.
1
9 / 8 / 5
Регистрация: 13.05.2015
Сообщений: 253
23.10.2021, 13:13  [ТС]
Вот смотрите, у меня получается так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private void timer1_Tick(object sender, EventArgs e)
{
    if(/*условие*/)
    {
        WMP1.URL = Environment.CurrentDirectory + @"/sounds/sound.wav";
        WMP1.controls.play();
        WMP1.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange);
    }//это всё срабатывает и далее переходим в обработчик, верно?
}
 
void WMP_PlayStateChange(int NewState)
{
    if (NewState == (int)WMPLib.WMPPlayState.wmppsMediaEnded)
    {
        Random rnd = new Random();
        int value = rnd.Next(1, 5);
        label2.Text = Convert.ToString(value);
        
        //запускаем рандомный файл из папки
        WMP2.URL = Environment.CurrentDirectory + @"/music/" + Convert.ToString(value) + ".mp3";
        WMP2.controls.play();
    
        //Первый раз у нас срабатывает и запускается, допустим 3.mp3
        //Второй раз у нас ловится окончание аудиофайла, выбирается новое рандомное число
        //Это я увидел так как в label2.Text вывелось другое рандомное число, к примеру 4
        //Но после этого 4 код уже не выполнялся, то есть дальше музыка не воспроизводилась
        //Никаких ошибок или исключений не выкидывало, просто изменилось ещё один раз value и всё
    }
}
private void Form1_Load(object sender, EventArgs e)
{
    WMP2.PlayStateChange += new WMPLib._WMPOCXEvents_PlayStateChangeEventHandler(WMP_PlayStateChange); //при загрузке сразу подписываем
}
Добавлено через 1 час 41 минуту
Решил проблему с тем, что не воспроизводилось, в обработчике:
C#
1
2
3
4
5
BeginInvoke(new Action(() =>
{
    WMP.URL = Environment.CurrentDirectory + @"/music/name.mp3";
    //WMP2 уже не юзал, просто заменял URL в WMP
}));
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.10.2021, 13:13
Помогаю со студенческими работами здесь

Попытка чтения или записи в защищенную память
Дело в том что у меня Windows 8, при попытке запуска проекта выдает ошибку: &quot;Необработанное исключение типа...

Попытка чтения или записи в защищенную память из dll на C++
Работаю в Visual Studio 2008. Столкнулся со следующей проблемкой. Допустим, есть dll-ка на C++ следующего содержания: mydll.h: ...

System.AccessViolationException не обработано Message: Попытка чтения или записи в защищенную память
AccessViolationException Сторонние библиотеки не использовал. Как избавиться от такого прерывания работы ? Добавлено через 13 минут ...

Попытка чтения или записи в защищенную память при попытке воспроизвести поток
что не так? при попытке воспроизвести поток на последней строчке возникает исключение AccessViolationException/ private void Play(double...

Запуск внешнего приложение (многократно) и ошибка "попытка чтения или записи в защищенную память"
здравствуйте, столкнулся с такой проблемой, на одной форме есть такой вот код: using System; using System.Collections.Generic; using...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита табличной части. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Функция заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru