Страница: 1 |
Страница: 1 |
Вопрос: В GDI+ возникла ошибка общего вида
Добавлено: 10.03.11 17:50
Автор вопроса: DLF
Подскажите, что делаю не так!
На форме содержится Timer1(100мсек), ImageList1(2 иконки 16х16х32), NotifyIcon1.
Код работает, но после 5-6 минутной работы вылетает ошибка:
System.Runtime.InteropServices.ExternalException не обработано
ErrorCode=-2147467259
Message=В GDI+ возникла ошибка общего вида.
Source=System.Drawing
Dim c As Integer = 0
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Enabled = True
End Sub
Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
If IsKeyLocked(Keys.CapsLock) = True Then
NotifyIcon1.Icon = Icon.FromHandle(CType(ImageList1.Images(c), Bitmap).GetHicon())
If c <> 1 Then
c = +1
Else
c = 0
End If
Else
NotifyIcon1.Icon = Icon.FromHandle(CType(ImageList1.Images(1), Bitmap).GetHicon())
End If
End Sub
End Class
Ответы
Всего ответов: 14
Номер ответа: 1
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #1
Добавлено: 11.03.11 00:58
как минимум, ты не освобождаешь ресурсы свежсозданной иконки. Каждые 100 мс.
Номер ответа: 2
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #2
Добавлено: 11.03.11 01:03
Большой утечки не будет, так как сборщик мусора все равно будет находить потерявшиеся объекты, финализировать, а в финализаторе у них стоит вызов Dispose.
Другой вопрос, что мешает создать заранее 2 объекта Icon и в таймере подставлять то один то другой?
Номер ответа: 3
Автор ответа:
DLF
Вопросов: 9
Ответов: 53
Профиль | | #3
Добавлено: 11.03.11 03:25
Мне нужно, чтобы при включенном CapsLock иконка меняла свой цвет (2 иконки с разным задним фоном, которые должны содержаться в ресурсах файла, а не в папке с программой). ImageList для этого вполне подходит (тем более, что я его использую для остальной части кода).
Номер ответа: 4
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #4
Добавлено: 11.03.11 17:16
Нет необходимости каждый раз создавать иконку из данных в ImageList, достаточно сделать заране из ImageList создать 2 нужных тебе иконки, затем менять их в таймере. Кол-во операций с GDI сильно уменьшится, вероятно, ошибка тоже пропадет. Память тоже менее активно будет использоваться.
Номер ответа: 5
Автор ответа:
DLF
Вопросов: 9
Ответов: 53
Профиль | | #5
Добавлено: 11.03.11 21:04
Был у меня перерыв в изучении программирования 2 года. Теперь начинаю всё с начала. Если не трудно, приведи пример. Наверно клёпки в голове не хватает.
Номер ответа: 6
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #6
Добавлено: 12.03.11 02:43
Номер ответа: 7
Автор ответа:
Захарка
Вопросов: 0
Ответов: 42
Профиль | | #7
Добавлено: 12.03.11 02:45
ой, сорри не подумал:
сразу не понял зачем c нужно(
Номер ответа: 8
Автор ответа:
DLF
Вопросов: 9
Ответов: 53
Профиль | | #8
Добавлено: 12.03.11 11:44
Спасибо, но до этого и я бы додумался бы. Мне нужно, чтобы иконка мигала при включенном CapsLock, а у NtifyIcon свойство Icon не индексируется. Вот в чем проблема.
Номер ответа: 9
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #9
Добавлено: 12.03.11 17:13
здесь нужно добавить еще 4 строчки кода.
Номер ответа: 10
Автор ответа:
DLF
Вопросов: 9
Ответов: 53
Профиль | | #10
Добавлено: 13.03.11 13:20
?
Номер ответа: 11
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #11
Добавлено: 13.03.11 16:19
какие же, Артем
Номер ответа: 12
Автор ответа:
Artyom
Разработчик
Вопросов: 130
Ответов: 6602
Профиль | | #12
Добавлено: 14.03.11 05:52
Это вопрос на 64 000 рублей!
Номер ответа: 13
Автор ответа:
AgentFire
ICQ: 192496851
Вопросов: 75
Ответов: 3178
Профиль | | #13
Добавлено: 14.03.11 10:06
здесь нужно добавить еще 4 строчки кода.
Полагаю, что эти?
Номер ответа: 14
Автор ответа:
DLF
Вопросов: 9
Ответов: 53
Профиль | | #14
Добавлено: 18.03.11 20:17
Не думаю...