Сборщик мусора удаляет нужные объекты - C#
Формулировка задачи:
Добрый день.
Есть класс, в котором запускается мультимедийный таймер из библиотеки winmm.dll.
При попытке сборки мусора приложение вылетает с ошибкой.: "Необработанное исключение: System.AccessViolationException: Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."
Код:
Где ошибка?
Как узнать какой критический объект удаляется?
PS: В режиме отладки все проходит замечательно и сборка мусорка не вызывает ошибки. Без отладки сразу ошибка на первом же GC.Collect.
public delegate void TimeProc(int id, int msg, int user, int param1, int param2); public class Timer { [DllImport("winmm.dll")] private static extern int timeBeginPeriod(int msec); [DllImport("winmm.dll")] private static extern int timeEndPeriod(int msec); [DllImport("winmm.dll")] private static extern int timeSetEvent(int delay, int resolution, TimeProc proc, int user, int mode); [DllImport("winmm.dll")] private static extern int timeKillEvent(int id); private int mTimerId; private int count = 0; private string date; public Timer(string date) { this.date = date; } public void Start() { timeBeginPeriod(1); int period = 40; int resolution = 0; int mode = 1; // 0 for periodic, 1 for single event mTimerId = timeSetEvent(period, resolution, new TimeProc(TimerCallback), 0, mode); } public void Stop() { timeKillEvent(mTimerId); timeEndPeriod(1); Console.WriteLine("количество тиков: " + count); } void TimerCallback(int id, int msg, int user, int param1, int param2) { if (count == 140) { GC.Collect(); } count++; } } class Program { static void Main(string[] args) { Timer timer = new Timer(DateToString.GetDate()); timer.Start(); Thread.Sleep(10000); timer.Stop(); } }
Решение задачи: «Сборщик мусора удаляет нужные объекты»
textual
Листинг программы
mTimerId = timeSetEvent(period, resolution, new TimeProc(TimerCallback), 0, mode);
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д